IBM DB2 文档说:
若要提高查询的性能,可以添加信息 表的约束。
我们可以提供以下NOT ENFORCED
选项:
ALTER TABLE <name> <constraint attributes> NOT ENFORCED
解释相当简单:
仅当表数据 独立已知符合约束。查询结果可能会 如果数据实际上不符合 约束。
据我了解 - 如果我有一个 foreign key
,在一个表格中,声明为 NOT ENFORCED
这与根本没有它完全一样。
但是,它的实际用例是什么,何时应该使用此选项?(没有强制约束和根本没有强制约束有什么区别)
所谓的信息约束可用于提高性能。这是通过向数据库添加见解来完成的。如果没有信息约束,Db2 将不知道两个表和相关列之间的关系。现在,SQL 查询编译器和优化器可以利用这一事实并优化查询执行。
因此,仅当数据确实以指定方式受到约束时,才应应用信息约束。Db2 不强制执行它,用户(您)保证该数据属性。因此,当它不为 true 时,查询结果可能是错误的,因为 Db2 假定存在关系。