解释结果中的 "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.
的元组
来自 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.
的元组