You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ON CONFLICT与ON CONSTRAINT主键写法的性能差异问询

ON CONFLICT 指定主键字段与指定主键约束的性能差异

这两种写法在锁机制、执行速度等性能维度不存在任何差异,原因如下:

  • 主键约束本质是绑定在指定字段上的唯一约束(同时附加非空限制),你示例中的employees_pkey就是基于employee_id创建的系统默认主键约束。PostgreSQL解析SQL时,无论用ON CONFLICT (employee_id)指定字段,还是ON CONSTRAINT employees_pkey指定约束名,最终都会定位到同一个底层唯一索引和约束逻辑。
  • 两种写法触发的冲突检测流程、对冲突行获取的排他锁类型、生成的执行计划完全一致,不会产生性能上的区别。

适用场景小提示

  • 指定字段的写法更直观,阅读SQL时能快速明确冲突判断的依据字段;
  • 指定约束名的写法在主键字段发生变更(极少见的业务场景)时,若约束名未修改,SQL无需调整,但实际业务中这种情况很少出现。

参考示例代码

创建表语句:

CREATE TABLE employees (
 employee_id int PRIMARY KEY,
 full_name VARCHAR NOT NULL,
 manager_id INT
);

指定主键字段的写法:

insert into employees (employee_id, full_name)
values (6, 'Yuvraj Singh')
ON CONFLICT (employee_id)
do
update set full_name = EXCLUDED.full_name; 

指定主键约束的写法:

insert into employees (employee_id, full_name)
values (6, 'Yuvraj Singh')
ON CONSTRAINT employees_pkey
do
update set full_name = EXCLUDED.full_name; 

内容的提问来源于stack exchange,提问作者Patan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:52:07