MySQL:快速DISTINCT查询的索引?

时间:2013-01-02 14:16:58

标签: mysql query-optimization

我需要设置哪些索引才能尽快为某个列上的DISTINCT查询获取结果?

示例表列:

id        INTEGER
name      VARCHAR(32)
groupname VARCHAR(16)

我经常需要获得所有群组的列表,

SELECT DISTINCT groupname FROM data ORDER BY groupname

该表可以具有> 200k条目,但只有十几个组。我不想为组名使用单独的表,因为数据经常从CSV文件中导入。

2 个答案:

答案 0 :(得分:5)

在这种情况下,groupname上的索引可以为您提供最佳结果。

如果这还不够好,还需要考虑几个选项 - 首先,您可以缓存该查询的结果,以便只在必要时才运行它。其次,您可以创建一个单独的表来存储groupname值并通过插入触发器填充它(这样可以避免更改CSV导入过程)

答案 1 :(得分:0)

对groupname编制索引可以解决您的问题。如果您在插入/更新时非常关心查询的性能,那么请尝试“列前缀索引”而不是索引整列。

在varchar上添加索引可能会减慢插入/更新速度,因为它需要更新每次写入的索引查找。有关更多信息,请阅读BTree索引算法