切記!MySQL中ORDER BY與LIMIT 不要一起用,有大坑
閱讀本文大概需要 2.8 分鐘。
來自:占小狼
1.? 現(xiàn)象與問題





2.? LIMIT查詢優(yōu)化

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



3.? 小結(jié)
推薦閱讀:
完全整理 | 365篇高質(zhì)技術(shù)文章目錄整理
專注服務(wù)器后臺技術(shù)棧知識總結(jié)分享
歡迎關(guān)注交流共同進步
評論
圖片
表情
