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

SQL Anywhere 12.0.1 » SQL Anywhere サーバー SQL の使用法 » テーブル、ビュー、インデックス » インデックス

 

クラスタードインデックス

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

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

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

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

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

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

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

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

 クラスタードインデックスの宣言
 参照