我有一張銷售信息表。其中一列叫royalty_currency
,我需要從這張表中拉出所有不同的貨幣。這樣做的查詢是:爲什麼此查詢使用索引?
SELECT distinct `royalty_currency` FROM `sales_raw`
當我沒有在此列的索引,EXPLAIN語句給我:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE sales_raw ALL NULL NULL NULL NULL 195121 Using temporary
後,我添加一個索引,EXPLAIN語句給我:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE sales_raw range NULL royalty_currency92 NULL 211 Using index for group-by
我的問題是,爲什麼SELECT語句需要使用索引?我認爲索引是針對WHERE
條款的?如果只選擇一個列,爲什麼需要使用索引?最後,這是我使用的常見查詢 - 是否應該在royalty_currency
上的此表中添加索引?
就像人們在下面的回答中所說的,索引不僅僅用於'WHERE'子句。排序索引可用於'ORDER BY'和(在你的情況下)'GROUP BY'子句。有關索引使用'GROUP BY'的更多信息,請參閱此處:http://dev.mysql.com/doc/refman/5.0/en/group-by-optimization.html – theon