Mysql

按列排序應該有索引嗎?

  • December 22, 2015

我已經為用於搜尋結果的表添加了索引。我按 ASC 或 DESC 順序顯示結果。那麼該列是否應該有索引?我在該表上還有 2 個索引。為該列創建或不創建索引將如何影響性能?

是的,MySQL 可以在 ORDER BY 中的列上使用索引(在某些條件下)。但是,MySQL 不能使用混合ASC、DESC 順序的索引(SELECT * FROM foo ORDER BY bar ASC, pants DESC)。分享您的查詢和 CREATE TABLE 語句將有助於我們更具體地回答您的問題。

有關如何優化 ORDER BY 子句的提示:http: //dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html

編輯 2012-01-21 8:53AM

關於在 ORDER BY 中使用混合 ASC/DESC 索引的聲明的來源存在疑問。來自ORDER BY Optimization文件:

在某些情況下,MySQL 不能使用索引來解析 ORDER BY,儘管它仍然使用索引來查找與 WHERE 子句匹配的行。這些案例包括:

你混合 ASC 和 DESC:

SELECT * FROM t1 ORDER BY key_part1 DESC,key_part2 ASC;

此外, DESC 關鍵字在 CREATE INDEX中沒有意義

index_col_name 規範可以以 ASC 或 DESC 結尾。這些關鍵字被允許用於指定升序或降序索引值儲存的未來擴展。目前,它們被解析但被忽略;索引值始終按升序儲存。

引用自:https://dba.stackexchange.com/questions/11031