Postgresql 解释结果中的“复查条件”是什么意思?

Postgresql 解释结果中的“复查条件”是什么意思?,postgresql,sql-execution-plan,Postgresql,Sql Execution Plan,来自PostgreSQL文档中的一个示例: EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 100 AND stringu1 = 'xxx'; QUERY PLAN ------------------------------------------------------------------------------ Bitmap Heap Scan on tenk1 (co

来自PostgreSQL文档中的一个示例:

EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 100 AND stringu1 = 'xxx';
                                  QUERY PLAN
------------------------------------------------------------------------------
 Bitmap Heap Scan on tenk1  (cost=5.04..229.43 rows=1 width=244)
   Recheck Cond: (unique1 < 100)
   Filter: (stringu1 = 'xxx'::name)
   ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..5.04 rows=101
 width=0)
         Index Cond: (unique1 < 100)
我说得对吗

首先对第一个条件的所有行执行位图索引扫描,然后

然后在返回的行上,执行位图堆扫描以获得第二个条件

既然位图索引扫描已经检查unique1<100上的索引条件,为什么在Bitmp堆扫描中会再次检查相同条件下的索引条件? 重新检查条件是什么意思

我不确定我是否理解这个相关的帖子


谢谢。

这是一种可能的情况重新检查,但并不总是执行

仅当位图有损时,解释分析将指示已执行重新检查

如果work_mem不够大,无法包含每个表行包含一位的位图,则位图索引扫描会有损。然后,它将降级为每8K页一位。必须重新检查这些块中的行。

邮件列表中的解释如下:

什么是复查条件?为什么需要复查

如果位图太大,我们将其转换为有损样式,在这种样式中 只记住哪些页面包含匹配的元组,而不是记住 每个元组都是单独的。当这种情况发生时,表访问阶段 必须检查页面上的每个元组,并重新检查扫描条件以 查看要返回的元组