二次索引の注意事項 

既存の索引によりテーブルからのデータ選択がどれだけサポートされているかは、索引を使用して選択されるデータが、最終的に必要なデータを表しているかどうかによって決まります。これについては、以下の例で説明します。

テーブル BSPTAB の項目 FIELD1 FIELD2 FIELD3 、および FIELD4 に対して索引がこの順に定義されています。このテーブルは、次の SELECT 命令によってアクセスされます。

SELECT * FROM BSPTAB WHERE FIELD1 = X1 AND FIELD2 = X2 AND FIELD4= X4.

FIELD3 は詳細に指定されていないので、索引として FIELD2 までが使われます。データベースシステムがこの索引を使用してデータにアクセスすると、 FIELD1 = X1 かつ FIELD2 = X2 であるレコードすべてがただちに検索されます。次に、 FIELD4 = X4 であるレコードすべてを、このセットから選択します。

索引の項目の順序は、アクセス速度に大きく影響します。先頭の項目は、たくさんの選択に対して定数値をもつ項目にしてください。実際の選択時には、索引の項目のうち指定されない最初の項目までが使われます。

索引として有効な項目は、選択において一連の結果を大幅に制限する項目だけです。

次の SELECT 命令は、住所ファイル ADRTAB に対して頻繁に実行されます。

SELECT * FROM ADRTAB WHERE TITEL = ‘Prof.’ AND NAME = X AND VORNAME = Y.

NAME FIRSTNAME TITLE という索引の場合、項目 TITLE は、 NAME および FIRSTAME で指定されるレコードをほとんど制限しません。なぜなら、同じ名前で肩書きが違う人はそれほどいないからです。これはこの索引においてそれほど有効ではありません。索引として項目 TITLE が単独で有効なのは、すべての教授が頻繁に選択されるような場合です。

ただし、追加索引は、テーブル内容が変更されるたびに調整が必要のため、システムに負荷がかかります。つまり索引が追加されると、それだけテーブルにレコードを挿入する処理の速度が低下します。

このため、頻繁にエントリが書き込まれるテーブルの索引は、基本的に数個にしてください。

場合によっては、選択に適した索引があってもデータベースシステムで使われないことがあります。どの索引が使用されるかは、使用するデータベースシステムのオプティマイザによって異なります。したがって、登録した索引が選択で使用されているかどうかをチェックしてください ( 索引の使用チェック方法を参照 )

索引を追加登録すると、パフォーマンスに副作用が生じることもあります。たとえば、ある選択で正常に使われた索引があっても、新しく登録された索引の方がデータを大きく限定するとオプティマイザが判断してしまうと ( 誤って判断されることもあります ) 、正常に使われた索引は使用されなくなる場合があるからです。

したがって、テーブルの索引内の共通項目ができるだけ少なくなるようにしてください。テーブル上の 2 つの索引に多くの共通項目があると、オプティマイザは、選択効果の高い索引がどちらであるか判断することが難しくなります。