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 の使用法 » クエリ処理 » クエリの最適化と実行 » クエリ・パフォーマンスの向上 » インデックス

 

物理インデックスを共有する論理インデックスの特定

インデックスを削除すると、論理インデックスが削除されますが、その参照先の物理インデックスも常に削除されるとは限りません。別の論理インデックスが同じ物理インデックスを参照している場合、その物理インデックスは削除されません。インデックスを削除することでディスク領域が解放されることを期待していたり、物理的に再作成するためにインデックスを削除しようとしたりする場合は特に注意する必要があります。

テーブルのインデックスが他のインデックスと物理インデックスを共有しているか判断するには、Sybase Central でテーブルを選択し、[インデックス] タブをクリックします。インデックスの [Phys. ID] 値もリスト内の別のインデックスのために存在するかどうかに注意してください。[Phys. ID] の値が一致するということは、それらのインデックスが同じ物理インデックスを共有しているということです。物理インデックスを再作成する場合は、ALTER INDEX ... REBUILD 文を使用できます。また、すべてのインデックスを削除してから再作成する方法もあります。

物理インデックスが共有されているテーブルの特定

次のようなクエリを実行することで、物理インデックスが共有されているすべてのテーブルのリストをいつでも取得できます。

SELECT tab.table_name, idx.table_id, phys.phys_index_id, COUNT(*) 
 FROM SYSIDX idx JOIN SYSTAB tab ON (idx.table_id = tab.table_id)
 JOIN SYSPHYSIDX phys ON ( idx.phys_index_id  = phys.phys_index_id 
   AND idx.table_id = phys.table_id )
 GROUP BY tab.table_name, idx.table_id, phys.phys_index_id
   HAVING COUNT(*) > 1
ORDER BY tab.table_name;

このクエリの結果セットの例を次に示します。

table_name table_id phys_index_id COUNT(*)
ISYSCHECK 57 0 2
ISYSCOLSTAT 50 0 2
ISYSFKEY 6 0 2
ISYSSOURCE 58 0 2
MAINLIST 94 0 3
MAINLIST 94 1 2

各テーブルのローの数は、テーブルの共有物理インデックスの数を示します。この例では、すべてのテーブルに共有物理インデックスが 1 つありますが、架空のテーブル MAINLIST には 2 つあります。phys_index_id 値は、共有されている物理インデックスを表し、COUNT カラムの値は、物理インデックスを共有している論理インデックスの数を表します。

当該テーブルで物理インデックスを共有しているインデックスを確認するには、Sybase Central を使用する方法もあります。これを行うには、左ウィンドウ枠でテーブルを選択し、右ウィンドウ枠で [インデックス] タブをクリックし、次に [Phys. ID] カラムの値が同じである複数のローを探します。[Phys. ID] の値が同じインデックスは、同じ物理インデックスを共有します。

参照