外键约束会影响Oracle中的查询转换吗?

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

是的,具有外键约束可以提高查询性能.当存在通常不可用的适当外键约束时,存在对优化器开放的各种变换.例如,如果你的加入AB,但只有选择的数据B,优化器可以消除A从查询计划完全如果有到位外键约束(这样的事情是非常方便的,当你有有用的观点,即加入比当前查询严格需要的更多表,因为您不必使用现有视图来交换额外连接的性能成本与代码重用.当您执行诸如查询重写之类的操作来重写查询以在数据仓库/ DSS类型系统中使用物化视图时,它们也会派上用场.

Tom Kyte有一个演示文稿Metadata Matters,讨论了各种类型的约束以及其他元数据如何影响优化器.

  • 断开的链接,我想演示文稿是这个:http://docslide.us/documents/metadata-matters-by-tom-kyte-oracle.html (2认同)