解释结果中的 "Recheck Cond" 是什么意思?

What does "Recheck Cond" in Explain result mean?

来自 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)

我说对了吗

既然 Bitmap Index Scan 已经检查了 unique1 < 100 上的 Index Cond,为什么在 Bitmp heap Scan 中再次出现相同条件的 "Recheck Cond"? "Recheck Cond" 是什么意思?

我不确定我是否理解这个相关的 post https://dba.stackexchange.com/questions/106264/recheck-cond-line-in-query-plans-with-a-bitmap-index-scan

谢谢。

这是对并非总是执行的条件的潜在重新检查。

仅当位图 有损EXPLAIN (ANALYZE) 将指示)时才执行重新检查。

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

邮件列表中的 Tom Lane 对此进行了解释:

what is "Recheck condition" and why is it needed?

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

的元组