原文地址(沒有進行嚴格的翻譯) https://dev.mysql.com/doc/ref...html
當查詢語句中存在 LIMIT N
同時沒有 HAVING
子句時,MySQL 可能會作下面的優化:mysql
LIMIT N
和 ORDER BY
組合起來用,那麼 MySQL 不會對整個查詢結果集排序,而是在找到知足條件的 N 條記錄後就中止對剩餘的記錄排序。若是排序是經過索引來進行的話,這會很是快。不然的話,若是出現 filesort 的情形,那麼全部知足條件的記錄都會被選取參與排序,排序過程依然是找到知足條件的 N 條記錄後中止。LIMIT N
和 DISTINCT
組合起來用,那麼 MySQL 會在找到 N 條不重複的結果後中止。LIMIT N
和 GROUP BY
組合起來用時,若是 MySQL 可以按索引的順序掃描記錄(或者根據索引排序來掃描記錄),那麼在找到 N 條記錄後,MySQL 不會再繼續計算後面的 GROUP BY
結果了。SQL_CALC_FOUND_ROWS
限制,那麼 MySQL 在掃描到 N 條知足條件的記錄後就會終止查詢。LIMIT 0
會立刻返回一個空結果。這個作法能夠用來:1)檢查查詢語句的合法性;2)不執行查詢的前提下得到查詢結果的字段屬性。LIMIT N
和 ORDER BY
組合起來用可是後者沒有用到索引,那麼 MySQL 有可能依靠內存中 filesort 操做來避免文件合併。ORDER BY
的查詢語句中,有沒有 LIMIT N
會致使返回結果的順序存在差別,雖然兩種狀況下返回的結果順序必定會遵照 ORDER BY
的規則。