什么时候应该在DB2中使用NOT ENFORCED和外键约束?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么时候应该在DB2中使用NOT ENFORCED和外键约束?相关的知识,希望对你有一定的参考价值。

IBM DB2文档说:

要提高查询性能,可以向表中添加信息约束。

我们可以提供这个NOT ENFORCED选项:

ALTER TABLE <name> <constraint attributes> NOT ENFORCED

解释相当简单:

只有在表数据独立已知符合约束条件时才应指定NOT ENFORCED。如果数据实际上不符合约束,则查询结果可能是不可预测的。

从我的理解 - 如果我让一个foreign key,在一张桌子,宣布为NOT ENFORCED,这完全相同,因为没有它。

但那么它的真实用例是什么?何时应该使用这个选项? (具有NOT ENFORCED约束与完全没有约束之间的区别是什么)

答案

所谓的Information Constraints可用于提高性能。这是通过向数据库添加见解来完成的。没有信息约束,Db2将不知道两个表和相关列之间的关系。现在,SQL查询编译器和优化器可以利用这一事实并优化查询执行。

因此,只有在数据确实以指定方式约束时才应用信息约束。 Db2不强制执行,用户(您)保证数据属性。因此,当它不成立时,查询结果可能是错误的,因为Db2假设存在关系。

以上是关于什么时候应该在DB2中使用NOT ENFORCED和外键约束?的主要内容,如果未能解决你的问题,请参考以下文章

怎样确定DB2 JDBC驱动的版本

在db2数据库9.7中,有时候执行一条update或select语句,要耗时很久,几个小

为啥 DB2 建议每个表空间一个表?

管理员用户下安装IBM的DB2报错:没有adminstrator最低权限

DB2 表的访问日期

db2分页技术优化问题: