Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データベースの作成 » データベース・オブジェクトの使用 » インデックスの操作

 

クラスタード・インデックスの使用

インデックスを使用すると、特定範囲のキーの値を検索する文のパフォーマンスを大幅に向上させることができますが、インデックスに連続して現れる 2 つのローは、データベース内の同じテーブル・ページに現れるとはかぎりません。

インデックスのクラスタ化を宣言することで、大規模なインデックス・スキャンをさらに改善することができます。クラスタード・インデックスを使用すると、連続したインデックス・エントリにおける 2 つのローがデータベース内の同じページに現れる確率が高くなります。このため、テーブル・ページをバッファ・プールに読み込む回数が減り、パフォーマンスがさらに向上します。

クラスタ化プロパティを持つインデックスが存在すると、データベース・サーバはテーブルのローをクラスタード・インデックスに出現する場合とほぼ同じ順序で格納しようとします。ただし、データベース・サーバはキーの順序を保持しようとしますが、クラスタ化は概算であり、完全なクラスタは保証されません。このため、データベース・サーバはテーブルを順次スキャンできず、クラスタード・インデックス・キーのシーケンスですべてのローが取得されるわけではありません。テーブルのローがソートされた順序で返されるようにするには、インデックスを使用してローにアクセスするアクセス・プランか、物理ソートを実行するアクセス・プランが必要です。

オプティマイザはクラスタ化プロパティを持つインデックスを利用します。これは、一致または隣接するインデックス・キー値を持つテーブル・ローについて、オプティマイザが物理的な隣接性の予測を考慮に入れてインデックス取得コストの予測を修正することによって行われます。

多くのローが挿入または更新されていくため、テーブルのクラスタ化の程度は時間とともに低下することがあります。データベース・サーバは、ISYSPHYSIDX システム・テーブルのクラスタード・インデックスごとにクラスタ化の程度を自動的に追跡します。テーブルのローで非クラスタ化が大幅に進行したことをデータベース・サーバが検出すると、オプティマイザは予測したインデックス取得コストを調整します。

テーブルのいずれかのインデックスをクラスタ化することを決定する際は、予測されるクエリの負荷を考慮する必要があります。通常は実験が必要になります。一般的に、指定されたクエリに次のような状態が起こる場合には、データベース・サーバはクラスタード・インデックスを使用してパフォーマンスを向上させることができます。

  • クエリの応答に必要なテーブル・ページの多くが、メモリ内にまだ存在しない。テーブル・ページがすでにメモリ内に存在する場合、サーバはこれらのページを読み込む必要がないため、クラスタリングは影響しません。

  • 非自明な数のローが返されると予想されるインデックス検索を実行し、クエリが応答できる。たとえば、通常、クラスタリングは単純なプライマリ・キーの検索には影響しません。

  • インデックス専用取得の実行とは対照的に、データベース・サーバは実際にテーブル・ページを読み込む必要がある。