来自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上的索引条件&lt;100,为什么在Bitmp堆扫描中会再次出现相同条件下的"重新判断条件"?

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

谢谢

推荐答案

邮件列表上的Tom Lane条解释了这一点:

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

如果位图变得太大,我们会将其转换为"有损"样式,在这种样式中

Postgresql相关问答推荐

如何在PSQL中查询jsonb列包含字符串的嵌套数组

无法在PostgreSQL中创建方案和表

如何在PostgreSQL中正确删除数据库

让Docker Compose Container等待容器PostgreSQL并恢复

Gorm 中的更新将created_at、updated_at 作为默认时间

使用 select 在带有特殊字符的字符串中查找数据

postgres 中的模式前缀,被调用元素的范围

如何将 JSONB 对象数组合并为 PostgreSQL 中的单个对象

如何为基于复合类型的 Postgres DOMAIN 定义 CHECK 约束

无法从在 wsl 2 上运行的服务之一连接到在 wsl 2 上的容器中运行的 postgres 数据库

Rails:创建删除表级联迁移

升级到 OSX Mavericks 后修复 postgresql

brew 程序更新恼人的错误信息

使用 try/except 与 psycopg2 或with closing?

PostgreSQL:将时间戳转换为时间 - 或仅从时间戳列中检索时间

在 PostgreSQL 中的表上禁用 DELETE?

将 Windows 上的 .sql 文件导入到 postgresql

Postgresql滚动删除旧行?

判断 Postgres 中是否存在序列(plpgsql)

如何为本地 Rails 元素设置 Postgres 数据库?