成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

切記!MySQL 中 ORDER BY 與 IMIT 不要一起用,有大坑

數(shù)據(jù)庫 MySQL
ORDER BY排序后,用LIMIT取前幾條,發(fā)現(xiàn)返回的結(jié)果集的順序與預(yù)期的不一樣。

 

 現(xiàn)象與問題

ORDER BY排序后,用LIMIT取前幾條,發(fā)現(xiàn)返回的結(jié)果集的順序與預(yù)期的不一樣。

下面是我遇到的問題:

可以看到,帶LIMIT與不帶LIMIT的結(jié)果與我預(yù)期的不一樣,而且“很不可思議”,真是百思不得其解。

后來百度了一下,如果order by的列有相同的值時(shí),mysql會隨機(jī)選取這些行,為了保證每次都返回的順序一致可以額外增加一個(gè)排序字段(比如:id),用兩個(gè)字段來盡可能減少重復(fù)的概率。

于是,改成 order by status, id;

問題雖然是解決了,但還是看看官方文檔上怎么說的吧!

LIMIT查詢優(yōu)化

摘自“LIMIT查詢優(yōu)化”

如果你只需要結(jié)果集中的指定數(shù)量的行,那么請?jiān)诓樵冎惺褂肔IMIT子句,而不是抓取整個(gè)結(jié)果集并丟棄剩下那些你不要的數(shù)據(jù)。

MySQL有時(shí)會優(yōu)化一個(gè)包含LIMIT子句并且沒有HAVING子句的查詢:

  •  MySQL通常更愿意執(zhí)行全表掃描,但是如果你用LIMIT只查詢幾行記錄的話,MySQL在某些情況下可能會使用索引。
  •  如果你將LIMIT row_count子句與ORDER BY子句組合在一起使用的話,MySQL會在找到排序結(jié)果的第一個(gè)row_count行后立即停止排序,而不是對整個(gè)結(jié)果進(jìn)行排序。如果使用索引來完成排序,這將非常快。如果必須執(zhí)行文件排序,則在找到第一個(gè)row_count行之前,選擇所有與查詢匹配但不包括LIMIT子句的行,并對其中大部分或所有行進(jìn)行排序。一旦找到第一個(gè)row_count之后,MySQL不會對結(jié)果集的任何剩余部分進(jìn)行排序。這種行為的一種表現(xiàn)形式是,一個(gè)ORDER BY查詢帶或者不帶LIMIT可能返回行的順序是不一樣的。
  •  如果LIMIT row_count與DISTINCT一起使用,一旦找到row_count惟一的行,MySQL就會停止。
  •  LIMIT 0 可以快速返回一個(gè)空的結(jié)果集,這是用來檢測一個(gè)查詢是否有效的一種很有用的方法。
  •  如果服務(wù)器使用臨時(shí)表來解析查詢,它將使用LIMIT row_count子句來計(jì)算需要多少空間。
  •  如果ORDER BY不走索引,而且后面還帶了LIMIT的話,那么優(yōu)化器可能可以避免用一個(gè)合并文件,并使用內(nèi)存中的filesort操作對內(nèi)存中的行進(jìn)行排序。

如果ORDER BY列有多行具有相同的值,服務(wù)器可以自由地以任何順序返回這些行,并且根據(jù)總體執(zhí)行計(jì)劃可能以不同的方式返回。換句話說,這些行的排序順序?qū)τ跓o序列是不確定的。

影響執(zhí)行計(jì)劃的一個(gè)因素是LIMIT,因此對于一個(gè)ORDER BY查詢而言,帶與不帶LIMIT返回的行的順序可能是不一樣的。

看下面的例子:

包含LIMIT可能會影響每一個(gè)category行的順序。例如:

如果你需要確保無論帶不帶LIMIT都要以相同的順序返回,那么你可以在ORDER BY中包含附加列,以使順序具有確定性。例如:

小結(jié)

1、如果你只需要結(jié)果集中的某幾行,那么建議使用limit。這樣這樣的話可以避免抓取全部結(jié)果集,然后再丟棄那些你不要的行。

2、對于order by查詢,帶或者不帶limit可能返回行的順序是不一樣的。

3、如果limit row_count 與 order by 一起使用,那么在找到第一個(gè)row_count就停止排序,直接返回。

4、如果order by列有相同的值,那么MySQL可以自由地以任何順序返回這些行。換言之,只要order by列的值不重復(fù),就可以保證返回的順序。

5、可以在order by子句中包含附加列,以使順序具有確定性。 

 

責(zé)任編輯:龐桂玉 來源: 良許Linux
相關(guān)推薦

2021-01-13 09:07:32

MySQLOrderLimit

2024-07-09 00:00:02

監(jiān)聽類Spring事件

2022-03-01 11:00:12

索引MySQL設(shè)計(jì)

2021-05-07 11:29:54

MacFlutter開發(fā)

2021-11-30 07:51:29

氣球數(shù)量空間

2012-07-27 13:36:00

Office操作系統(tǒng)

2023-03-28 08:12:06

優(yōu)化系統(tǒng)IOPS

2015-01-08 09:18:25

DockerRocket容器技術(shù)

2015-07-15 09:28:22

云計(jì)算原型設(shè)計(jì)物聯(lián)網(wǎng)

2014-12-31 10:33:44

Google 2015

2023-03-28 10:25:59

靜默GlobalFlag進(jìn)程

2023-06-28 07:49:02

2022-04-06 08:23:57

指針函數(shù)代碼

2012-03-28 22:06:15

Android

2020-07-13 12:27:37

百度大腦

2015-03-25 17:28:26

UCloud

2012-08-01 09:41:43

設(shè)計(jì)設(shè)計(jì)師UI設(shè)計(jì)

2015-07-30 11:37:51

繽紛暑期

2024-02-26 00:00:00

架構(gòu)老化重構(gòu)

2022-12-02 14:20:09

Tetris鴻蒙
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 伊人青青久久 | 亚洲精品一区二区在线观看 | 九九久视频 | 国产免费一区二区三区最新6 | 亚洲一区在线日韩在线深爱 | 中日韩毛片 | 日韩精品色网 | av一二三区 | 人妖av| 精品一区二区三区视频在线观看 | 综合一区二区三区 | av在线免费观看网站 | 成人精品一区二区三区 | 黄色成人av| 久久一二区 | 91在线一区 | 精品国产欧美 | 一级免费看 | 国产精品欧美大片 | 欧美久久不卡 | 久久不射网 | 亚洲精品一区在线观看 | 久久久久国产一区二区三区四区 | 亚洲精品视频一区二区三区 | 热久久久 | 91av视频 | 成人精品免费视频 | 精品视频一区二区三区在线观看 | 日本又色又爽又黄的大片 | 国产成人综合在线 | 欧洲视频一区二区 | 99久久精品国产一区二区三区 | 欧美日韩一区在线播放 | 欧洲亚洲视频 | 欧美日韩久久精品 | 久久久久免费 | 欧美激情国产日韩精品一区18 | 久久久激情视频 | 日韩精品一区在线 | 国产一区二区 | 国产综合久久 |