7.2.9 MySQL 如何最佳化 ORDER BY
在一些情況下,MySQL可以直接使用索引來滿足一個 ORDER BY 或 GROUP BY 子句而無需做額外的排序。
儘管 ORDER BY 不是和索引的順序準確匹配,索引還是可以被用到,只要不用的索引部分和所有的額外的 ORDER BY 欄位在 WHERE 子句中都被包括了。下列的幾個查詢都會使用索引來解決 ORDER BY 或 GROUP BY 部分:
SELECT * FROM t1 ORDER BY key_part1,key_part2,... ;
SELECT * FROM t1 WHERE key_part1=constant ORDER BY key_part2;
SELECT * FROM t1 WHERE key_part1=constant GROUP BY key_part2;
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC;
SELECT * FROM t1
WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC;
在另一些情況下,MySQL無法使用索引來滿足 ORDER BY,儘管它會使用索引來找到記錄來匹配 WHERE 子句。這些情況如下:
對不同的索引鍵做 ORDER BY :
SELECT * FROM t1 ORDER BY key1, key2;
在非連續的索引鍵部分上做 ORDER BY:
SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2;
同時使用了 ASC 和 DESC:
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
用於搜尋記錄的索引鍵和做 ORDER BY 的不是同一個:
SELECT * FROM t1 WHERE key2=constant ORDER BY key1;
有很多表一起做串連,而且讀取的記錄中在 ORDER BY 中的欄位都不全是來自第一個非常數的表中(也就是說,在 EXPLAIN 分析的結果中的第一個表的連線類型不是 const)。
http://www.bkjia.com/PHPjc/630969.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/630969.htmlTechArticle7.2.9 MySQL 如何最佳化 ORDER BY 在一些情況下,MySQL可以直接使用索引來滿足一個 ORDER BY 或 GROUP BY 子句而無需做額外的排序。 儘管 ORDER BY 不是和...