我有一张销售信息表。其中一列叫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