发布于 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