インデックスを削除すると、論理インデックスが削除されますが、その参照先の物理インデックスも常に削除されるとは限りません。別の論理インデックスが同じ物理インデックスを参照している場合、その物理インデックスは削除されません。インデックスを削除することでディスク領域が解放されることを期待していたり、物理的に再作成するためにインデックスを削除しようとしたりする場合は特に注意する必要があります。
テーブルのインデックスが他のインデックスと物理インデックスを共有しているか判断するには、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] の値が同じインデックスは、同じ物理インデックスを共有します。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |