postgresql查询使用一个过滤值很快,使用其他值很慢



我有两个表,每个表有1亿多行,table_1和tabke_2。

我们插入具有相同日期"0"的60000+行;今天";在每个表的一列中。这个";日期";字段在两个表中的每个表中都有索引。我们每天都在做这个插入。

插入之后,如果我们运行查询

select count(*)
from ((select field1 from table_1 where date_field = 'yyyy-mm-dd' --**yesterday's date** ) a 
INNER JOIN
(select field1 from table_2 where date_field = 'yyyy-mm-dd' --**yesterday's date** ) b 
ON a.field1 = b.field1) c

在1秒内运行

select count(*)
from ((select field1 from table_1 where date_field = 'yyyy-mm-dd' --**today's date** ) a 
INNER JOIN
(select field1 from table_2 where date_field = 'yyyy-mm-dd' --**today's date** ) b 
ON a.field1 = b.field1) c

在6小时内运行!

明天,此查询将在1秒内运行,第二天的日期查询将运行6个小时。

我完全感到困惑。为什么同一个查询运行1秒,而最近插入的数据查询运行6小时?第二天,6小时查询将在1秒内运行,当天的日期查询将运行6小时。。。

我会检查查询的解释计划,我怀疑在您执行缓慢的查询后会自动收集统计信息,从而在第二天更改执行计划。

编辑:哦,所以修复方法是在加载新数据后调用analysis。

最新更新