是否将唯一值检测延迟到事务结束时进行(delay_check_unique)
📄字数 1.1K
👁️阅读量 加载中...
引入版本
v11.0.0
功能描述
是否将唯一值检测延迟到事务结束时进行。
参数属性
| 属性 | 属性值 |
|---|---|
| 参数类型 | BOOLEAN |
| 默认值 | FALSE |
| 取值范围 | TRUE,FALSE |
| 影响范围 | 系统级 |
| 修改方式 | 在线修改,立即生效 |
使用场景说明
- 该参数控制系统是否延迟 UPDATE 场景中的唯一值约束检测。
| delay_check_unique | 作用及影响 |
|---|---|
| TRUE | 唯一值检测统一延迟在事务提交阶段进行处理。 |
| FALSE | 唯一值检测发生在数据更新前。 |
- delay_check_unique 与 check_unique_mode 共同控制系统进行唯一值检测的行为,它们的控制矩阵图如下:
| - | check_unique_mode = 1 | check_unique_mode = 2 |
|---|---|---|
| delay_check_unique = true | UPDATE 场景延迟检测,INSERT 场景不进行预检测。 | UPDATE 场景延迟检测,INSERT 场景进行预检测。 |
| delay_check_unique = false | INSERT 和 UPDATE 场景不进行预检测。 | INSERT 和 UPDATE 场景均进行预检测。 |
提示
- 关闭唯一值延迟检测(delay_check_unique = false)能减少不必要的冗余操作,对业务性能提升有帮助。
示例
sql
-- 在线修改 delay_check_unique
SQL> SET delay_check_unique TO false;
-- 在线查看 delay_check_unique
SQL> SHOW delay_check_unique;
/*
* 场景一:
* 1. delay_check_unique = false;
* 2. check_unique_mode = 2;
* 3. auto_commit = true;
*/
SQL> CREATE TABLE t1(c1 INTEGER);
SQL> CREATE UNIQUE INDEX idx ON t1(c1);
SQL> INSERT INTO t1 VALUES(1)(2);
SQL> UPDATE t1 SET c1 = 1 WHERE c1 = 2; -- 存储内的数据在更新前进行唯一值检测,并报 E13001 违反唯一值约束;
/*
* 场景二:
* 1. delay_check_unique = true;
* 2. check_unique_mode = 2;
* 3. auto_commit = true;
*/
SQL> CREATE TABLE t1(c1 INTEGER);
SQL> CREATE UNIQUE INDEX idx ON t1(c1);
SQL> INSERT INTO t1 VALUES(1)(2);
SQL> UPDATE t1 SET c1 = 1 WHERE c1 = 2; -- 存储内的数据在更新时被动报 E13001 违反唯一值约束;