程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> MySQL手冊版本 5.0.20-MySQL優化(四) (1)

MySQL手冊版本 5.0.20-MySQL優化(四) (1)

編輯:關於PHP編程

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)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved