创建几个部分索引,只扫描一次(Postgresql)?

时间:2011-06-07 14:53:35

标签: postgresql indexing

我有一张桌子上有一堆来自美国各县的统计数据。

因为它太大了,我想用一套全面的部分索引来索引它。

CREATE INDEX county_stats_34_idx on stats_county (stateid, countyid, site, yeargroup, foo, bar)
WHERE stateid = 1;
CREATE INDEX county_stats_25_idx on stats_county (stateid, countyid, site, yeargroup, foo, bar)
WHERE stateid = 2;
...
CREATE INDEX county_stats_32_idx on stats_county (stateid, countyid, site, yeargroup, foo, bar)
WHERE stateid = 53;

这将扫描表的每一行53次,检查stateid并在适当的位置添加到索引。我想知道 - 是否有更有效的方法来创建这些指数?从逻辑上讲,只有需要一次扫描表,使用53项开关......

只是好奇,因为我似乎需要以某种频率做这种事情......

谢谢!

1 个答案:

答案 0 :(得分:1)

如果在stateid上添加索引,PG将不必扫描整个表。当然,构建一个必须扫描整个表,并且创建实际索引需要扫描该索引。

此外,word on the street是您可以在不同的会话中同时启动它们。这是有道理的,因为最佳的是你每行只能获得一个磁盘,并且从那时起缓存命中。虽然在你的情况下,没有创建两个索引实际上需要读取同一行 - 它们每个都覆盖一个非交叉子集。

我认为你应该尝试在stateid上创建一个简单的索引。

相关问题