Mysql
按列排序應該有索引嗎?
我已經為用於搜尋結果的表添加了索引。我按 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 結尾。這些關鍵字被允許用於指定升序或降序索引值儲存的未來擴展。目前,它們被解析但被忽略;索引值始終按升序儲存。