PostgreSQL中EXPLAIN ANALYZE的Unique节点含义是什么?
执行计划中Unique节点的含义解析
你执行的查询语句:
INSERT INTO "Person" SELECT DISTINCT undergraduateDegreeFrom_0.a, 3 FROM "undergraduateDegreeFrom" undergraduateDegreeFrom_0 WHERE undergraduateDegreeFrom_0.flag = 2 AND NOT EXISTS (SELECT * FROM "Person" Person_NotExists WHERE undergraduateDegreeFrom_0.a = Person_NotExists._0);
针对执行计划里的Unique节点,具体含义如下:
核心功能:它是数据库用来落实
SELECT语句中DISTINCT关键字的执行组件,专门从上游返回的结果集中剔除重复行,确保最终插入到Person表的记录都是唯一的。结合你的查询的工作过程:
- 上游先完成两步筛选:从
undergraduateDegreeFrom表选出flag=2的行,再通过NOT EXISTS排除掉a值已存在于Person表的记录; - 经过筛选后的结果里,可能还存在重复的
(a, 3)组合(因为undergraduateDegreeFrom表中可能有多个相同a且flag=2的行); - Unique节点会对这些重复行做去重处理,最终只保留每个
(a, 3)唯一组合的一行。执行计划里的“行数2414”是去重后实际要插入的记录数,“循环1次”表示该节点只需遍历一遍上游结果集就能完成去重。
- 上游先完成两步筛选:从
存在的必要性:你用
NOT EXISTS仅保证了要插入的a值在目标表Person中不存在,但无法处理源表undergraduateDegreeFrom内部的重复a值,因此DISTINCT是必要的,而Unique节点就是数据库执行这个去重逻辑的具体单元。
内容的提问来源于stack exchange,提问作者Abhishek Manikandan
相关产品推荐
相关产品推荐

