我有一张桌子上有一堆来自美国各县的统计数据。
因为它太大了,我想用一套全面的部分索引来索引它。
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项开关......
只是好奇,因为我似乎需要以某种频率做这种事情......
谢谢!
答案 0 :(得分:1)
如果在stateid
上添加索引,PG将不必扫描整个表。当然,构建一个必须扫描整个表,并且创建实际索引需要扫描该索引。
此外,word on the street是您可以在不同的会话中同时启动它们。这是有道理的,因为最佳的是你每行只能获得一个磁盘,并且从那时起缓存命中。虽然在你的情况下,没有创建两个索引实际上需要读取同一行 - 它们每个都覆盖一个非交叉子集。
我认为你应该尝试在stateid
上创建一个简单的索引。