↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

把 not 挪进子句让软删除查询快 32 倍 RSS

软删除表的常见写法是 EXISTS 配活跃行的部分索引。Nikolay Samokhvalov 对比两个等价查询:一个用 EXISTS 匹配占 98% 的活跃帖子,另一个把 not 挪进子句,用 NOT EXISTS 匹配占 2% 的已删除帖子。后者快 32 倍。原因是索引里「没找到」可以完全跳过堆访问,而「找到了」在频繁更新的表上还要回表校验可见性:前者做了 52.7 万次堆读取,后者 1 万次。凡少数派布尔标记的模式都适用这个思路。

发布于 2026-09-10T10:59:37.388741Z · Nikolay Samokhvalov · postgres.ai
性能 查询优化 索引

软删除表的常见写法是 EXISTS 配活跃行的部分索引。Nikolay Samokhvalov 对比两个等价查询:一个用 EXISTS 匹配占 98% 的活跃帖子,另一个把 not 挪进子句,用 NOT EXISTS 匹配占 2% 的已删除帖子。后者快 32 倍。原因是索引里「没找到」可以完全跳过堆访问,而「找到了」在频繁更新的表上还要回表校验可见性:前者做了 52.7 万次堆读取,后者 1 万次。凡少数派布尔标记的模式都适用这个思路。

软删除表的常见写法是 EXISTS 配活跃行的部分索引。Nikolay Samokhvalov 对比两个等价查询:一个用 EXISTS 匹配占 98% 的活跃帖子,另一个把 not 挪进子句,用 NOT EXISTS 匹配占 2% 的已删除帖子。后者快 32 倍。原因是索引里「没找到」可以完全跳过堆访问,而「找到了」在频繁更新的表上还要回表校验可见性:前者做了 52.7 万次堆读取,后者 1 万次。凡少数派布尔标记的模式都适用这个思路。

原始来源 ↗

来源记录
  • center.info_item · 65cfdd15b645124a · 2026-10-03T04:08:35.169032Z
  • pgweb.info_item · 65cfdd15b645124a · 2026-10-03T04:08:55.967155Z