【发布时间】:2012-08-23 20:40:39
【问题描述】:
我有一张包含销售信息的表格。其中一列称为royalty_currency,我需要从该表中提取所有不同的货币。这样做的查询是:
SELECT distinct `royalty_currency` FROM `sales_raw`
当我在此列上没有索引时,解释语句给我:
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
添加索引后,解释语句给了我:
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一起使用索引的更多信息,请参见此处:dev.mysql.com/doc/refman/5.0/en/group-by-optimization.html