我有一张表,里面有一堆来自美国各县的统计数据。
因为它太大了,我想用一组全面的偏索引来索引它。
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
上创建一个简单的索引。