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



我有一张表,里面有一堆来自美国各县的统计数据。

因为它太大了,我想用一组全面的偏索引来索引它。

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项开关。。。

只是好奇,因为我似乎需要以一定的频率做这种事情。。。

谢谢!

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

此外,街上流传的说法是,你可以从不同的会话中同时启动它们。这是有道理的,因为最佳情况下,每行只会有一个磁盘命中,然后缓存命中。尽管在您的情况下,创建的两个索引实际上不需要读取同一行,但它们都覆盖了一个不相交的子集。

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

最新更新