12

私はこのような状況にあります:

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_idは、実際には外部キー参照を意味しますが、a.a_id正式にはそのように宣言されていません。明らかに、それは完全性の理由によるはずです。しかし、外部キー制約は、一般的または特定の場合の結合パフォーマンスも改善しますか?はいの場合、どのタイプのクエリ変換に対してですか?

このトピックに関連するドキュメントはありますか?

Oracle 11g(11.2.0.2.0)を使用しています

4

2 に答える 2

15

はい、外部キー制約を設定すると、クエリのパフォーマンスが向上します。一般に利用できない適切な外部キー制約が存在する場合、オプティマイザーに対して開かれているさまざまな変換があります。たとえば、結合AしてBからデータを選択するだけの場合B、オプティマイザーはA外部キー制約が設定されている場合は、クエリ プランから完全に削除します (この種のことは、現在のクエリが厳密に必要とするよりも多くのテーブルに結合する便利なビューがある場合に非常に便利です。既存のビューの使用によるコードの再利用に対する余分な結合のパフォーマンス コスト)。また、クエリ リライトなどを使用してクエリをリライトし、データ ウェアハウス/DSS タイプ システムでマテリアライズド ビューを使用する場合にも役立ちます。

Tom Kyte はMetadata Mattersというプレゼンテーションを行っており、さまざまな種類の制約と他のメタデータがオプティマイザにどのように影響するかについて説明しています。

于 2011-11-16T15:42:13.777 に答える