我需要设置哪些索引才能尽快为某个列上的DISTINCT查询获取结果?
示例表列:
id INTEGER
name VARCHAR(32)
groupname VARCHAR(16)
我经常需要获得所有群组的列表,
SELECT DISTINCT groupname FROM data ORDER BY groupname
该表可以具有> 200k条目,但只有十几个组。我不想为组名使用单独的表,因为数据经常从CSV文件中导入。
答案 0 :(得分:5)
在这种情况下,groupname
上的索引可以为您提供最佳结果。
如果这还不够好,还需要考虑几个选项 - 首先,您可以缓存该查询的结果,以便只在必要时才运行它。其次,您可以创建一个单独的表来存储groupname
值并通过插入触发器填充它(这样可以避免更改CSV导入过程)
答案 1 :(得分:0)
对groupname编制索引可以解决您的问题。如果您在插入/更新时非常关心查询的性能,那么请尝试“列前缀索引”而不是索引整列。
在varchar上添加索引可能会减慢插入/更新速度,因为它需要更新每次写入的索引查找。有关更多信息,请阅读BTree索引算法