Luk*_*der 12 oracle optimization performance cost-based-optimizer sql-execution-plan
我有这样的情况:
create table a(
a_id number(38) not null,
constraint pk_a primary key (id)
);
create table b(
a_id number(38) not null
);
create index b_a_id_index on b(a_id);
Run Code Online (Sandbox Code Playgroud)
现在b.a_id实际上是指外键引用a.a_id,但它没有正式声明.显然,这应该是出于诚信原因.但是,外键约束是否也会改善一般情况下或特定情况下的连接性能?如果是,对于什么类型的查询转换?
是否有关于此主题的相关文档?
我正在使用Oracle 11g(11.2.0.2.0)
Jus*_*ave 14
是的,具有外键约束可以提高查询性能.当存在通常不可用的适当外键约束时,存在对优化器开放的各种变换.例如,如果你的加入A和B,但只有选择的数据B,优化器可以消除A从查询计划完全如果有到位外键约束(这样的事情是非常方便的,当你有有用的观点,即加入比当前查询严格需要的更多表,因为您不必使用现有视图来交换额外连接的性能成本与代码重用.当您执行诸如查询重写之类的操作来重写查询以在数据仓库/ DSS类型系统中使用物化视图时,它们也会派上用场.
Tom Kyte有一个演示文稿Metadata Matters,讨论了各种类型的约束以及其他元数据如何影响优化器.