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

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

 

クラスタドインデックス

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

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

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

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

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

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

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

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

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