Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 外键约束是否影响Oracle中的查询转换?_Performance_Oracle_Optimization_Sql Execution Plan_Cost Based Optimizer - Fatal编程技术网

Performance 外键约束是否影响Oracle中的查询转换?

Performance 外键约束是否影响Oracle中的查询转换?,performance,oracle,optimization,sql-execution-plan,cost-based-optimizer,Performance,Oracle,Optimization,Sql Execution Plan,Cost Based Optimizer,我的情况是这样的: 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); 现在b.a\u id实际上是指引用a.a\u id的外键,但它并没有正式声明为外键。显然,这应该是出于诚信的原因。但外键约束在一般情况下还是在

我的情况是这样的:

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);
现在
b.a\u id
实际上是指引用
a.a\u id
的外键,但它并没有正式声明为外键。显然,这应该是出于诚信的原因。但外键约束在一般情况下还是在特定情况下也会提高联接性能?如果是,针对什么类型的查询转换

是否有关于此主题的相关文档


我正在使用Oracle 11g(11.2.0.2.0)

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

Tom Kyte在一篇演讲中谈到了各种类型的约束以及其他元数据如何影响优化器。

正如前面所指出的,连接消除是一种基本的非基于成本的SQL转换,它只能基于元数据的存在来应用。我最近在博客中谈到了这一点:


正如我最初假设的,有很多SQL转换依赖于元数据,因此添加外键约束(和其他约束)肯定会以积极的方式影响性能。

我确信我以前读过类似的内容。不管怎样,这似乎很明显。感谢您提供了出色的答案和链接!断开的链接,我猜演示文稿是这样的: