私は、データベース製品の1つによって提唱されているインデックス作成戦略に混乱しています。データベースは「DB2fori」(iSeries/AS400)です。
以下のSQLおよびSQLの製品によってアドバイスされた索引を参照してください。新しいインデックスを作成した後、実行時間に改善はありません。両方の場合(新しいインデックスなしと新しいインデックスあり)の実行時間は10ミリ秒です。新しいインデックスのサイズ(ディスク容量)は、既存のインデックス(主キー)の2倍のサイズであり、おそらくより多くのシステムリソース(メモリ)を使用します。問題のSQLに基づく新しいインデックスのメリットを誰かが見ていますか?
テーブル:
Invoice ( 30 columns , primary key invoice_id , several million records)
customer ( 20 columns , primary key cust_code, half million records)
Cust_codeのFKは、請求書テーブルで定義されています。
クエリ:
select i.col1, i.col2, ..., i.col20,
c.col1, c.col2,....,c.col10
from invoice i, customer c
where i.invoice_id = '123'
and i.cust_code = c.cust_code
推奨されるインデックス:
Table: invoice Columns : invoice_id, cust_code
はい、それは必要ですが、少なくともSQLServerでインデックスを作成せずに支援できます
インデックス付けされていないinvoice..cust_codeで結合しているため、データベースエンジンはテーブルでハッシュルックアップを実行して、正しい顧客コードを持つすべての請求書を見つけ、請求書IDでフィルタリングする必要があります。
オプティマイザーはこの単一の顧客にinvoice_id'123 'が存在すると安全に想定できるため、外部キーを作成して適用することにより、結合が高速になりますが、提案されたインデックスがあると、オプティマイザーが最適なクエリプランを見つけるのに役立ちます。両方のテーブル、より速く。