什么时候应该在DB2中将NOT ENFORCED与外键约束一起使用?

时间:2019-02-04 09:22:46

标签: db2

IBM DB2文档说:

  

要提高查询性能,可以添加信息性   表的约束条件。

我们可以提供以下NOT ENFORCED选项:

ALTER TABLE <name> <constraint attributes> NOT ENFORCED

解释很简单:

  

NOT ENFORCED仅在表数据为   独立已知符合约束条件。查询结果可能   如果数据实际上不符合   约束。

根据我的理解-如果我假设一个foreign key在表中声明为NOT ENFORCED,这与根本没有它完全相同。

但是,真正的用例是什么?何时应使用此选项? (拥有NOT ENFORCED约束与根本没有约束之间有什么区别)

1 个答案:

答案 0 :(得分:1)

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

因此,仅当确实以指定方式限制了数据时,才应应用信息约束。 Db2不强制执行它,用户(您)保证该数据属性。因此,如果不正确,则查询结果可能是错误的,因为Db2假定存在这种关系。