第一个查询希望找到 ,但实际上找到rows=40250
。 第二个查询期望找到 并实际找到rows=924699
。
当然,处理23倍的行会花费更多的时间。因此,您的实际时间不足为奇。
的数据统计信息updated_at > Now()
已过时。跑:
并重复您的查询。而您是否认真地拥有数据updated_at > Now()
呢?听起来不对。
但是,对于最近更改的数据而言,统计数据已过时也就不足为奇了。这是合乎逻辑的。如果查询依赖于当前统计信息,则必须先运行,ANALYZE
然后再运行查询。
还要进行测试(仅在您的会话中):
并重复第二次查询以查看没有位图索引扫描的时间。