4

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

示例表列:

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

每隔一段时间,我需要获取所有组的列表,

SELECT DISTINCT groupname FROM data ORDER BY groupname

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

4

2 回答 2

5

在这种情况下,索引groupname应该可以为您带来最好的结果。

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

于 2013-01-02T14:18:37.787 回答
0

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

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

于 2013-01-02T14:45:35.973 回答