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

切記!MySQL中Order By與Limit不要一起用!

數據庫 MySQL
切記!MySQL 中 ORDER BY 與 LIMIT 不要一起用,有大坑......

[[375496]]  

圖片來自 Pexels

現象與問題

ORDER BY 排序后,用 LIMIT 取前幾條,發現返回的結果集的順序與預期的不一樣。

下面是我遇到的問題:

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

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

于是,改成 order by status,id:

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

LIMIT 查詢優化

摘自“LIMIT 查詢優化”

如果你只需要結果集中的指定數量的行,那么請在查詢中使用 LIMIT 子句,而不是抓取整個結果集并丟棄剩下那些你不要的數據。

MySQL 有時會優化一個包含 LIMIT 子句并且沒有 HAVING 子句的查詢:

①MySQL 通常更愿意執行全表掃描,但是如果你用 LIMIT 只查詢幾行記錄的話,MySQL 在某些情況下可能會使用索引。

②如果你將 LIMIT row_count 子句與 ORDER BY 子句組合在一起使用的話,MySQL 會在找到排序結果的第一個 row_count 行后立即停止排序,而不是對整個結果進行排序。如果使用索引來完成排序,這將非???。

如果必須執行文件排序,則在找到第一個 row_count 行之前,選擇所有與查詢匹配但不包括 LIMIT 子句的行,并對其中大部分或所有行進行排序。

一旦找到第一個 row_count 之后,MySQL 不會對結果集的任何剩余部分進行排序。

這種行為的一種表現形式是,一個 ORDER BY 查詢帶或者不帶 LIMIT 可能返回行的順序是不一樣的。

③如果 LIMIT row_count 與 DISTINCT 一起使用,一旦找到 row_count 惟一的行,MySQL 就會停止。

④LIMIT 0 可以快速返回一個空的結果集,這是用來檢測一個查詢是否有效的一種很有用的方法。

⑤如果服務器使用臨時表來解析查詢,它將使用 LIMIT row_count 子句來計算需要多少空間。

⑥如果 ORDER BY 不走索引,而且后面還帶了 LIMIT 的話,那么優化器可能可以避免用一個合并文件,并使用內存中的 filesort 操作對內存中的行進行排序。

⑦如果 ORDER BY 列有多行具有相同的值,服務器可以自由地以任何順序返回這些行,并且根據總體執行計劃可能以不同的方式返回。換句話說,這些行的排序順序對于無序列是不確定的。

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

看下面的例子:

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

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

小結

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

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

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

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

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

參考文檔:

  • https://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html
  • https://dev.mysql.com/doc/refman/5.7/en/
  • https://dev.mysql.com/doc/

作者:廢物大師兄

編輯:陶家龍

出處:cnblogs.com/cjsblog/p/10874938.html

 

責任編輯:武曉燕 來源: 博客園
相關推薦

2021-08-26 10:50:37

MySQLORDER BYIMIT

2022-03-01 11:00:12

索引MySQL設計

2021-05-07 11:29:54

MacFlutter開發

2021-11-30 07:51:29

氣球數量空間

2012-07-27 13:36:00

Office操作系統

2023-03-28 08:12:06

優化系統IOPS

2015-01-08 09:18:25

DockerRocket容器技術

2024-07-09 00:00:02

監聽類Spring事件

2015-07-15 09:28:22

云計算原型設計物聯網

2014-12-31 10:33:44

Google 2015

2023-06-28 07:49:02

2022-04-06 08:23:57

指針函數代碼

2023-03-28 10:25:59

靜默GlobalFlag進程

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

設計設計師UI設計

2015-07-30 11:37:51

繽紛暑期

2024-02-26 00:00:00

架構老化重構

2022-12-02 14:20:09

Tetris鴻蒙
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久亚洲天堂 | 亚洲理论在线观看电影 | 五月婷亚洲 | 国产精品99久久免费观看 | 日本不卡在线视频 | 中文字幕一区二区三区四区五区 | 99热播放| 91精品成人久久 | 91精品久久久久久久久中文字幕 | 精品国产欧美 | 手机在线一区二区三区 | 亚洲一区影院 | 国产精品久久九九 | 91成人免费看片 | 污书屋 | 日韩综合网 | 亚州无限乱码 | 欧美中文一区 | 黄色大片网站 | 亚洲天堂av网 | 中文字幕一区二区三区日韩精品 | 91日日| 黄色免费在线网址 | 国产精品久久久久久久久久久久 | 激情五月婷婷综合 | 岛国av免费观看 | 99av成人精品国语自产拍 | 欧美日韩国产一区二区三区 | 国产黄视频在线播放 | cao在线 | 中文一区二区 | 国产日韩一区二区三区 | 黄在线免费观看 | 国产美女网站 | 91精品国产777在线观看 | 成人片免费看 | 精品久久久久久久久久久下田 | 免费观看一区二区三区毛片 | 黑人精品欧美一区二区蜜桃 | 91精品国产综合久久婷婷香蕉 | 一区二区三区四区免费观看 |