Db2のテーブルで使用可能なすべてのインデックスを見つける方法は?
db2 "select * from syscat.indexes where tabname = 'your table name here' \
and tabschema = 'your schema name here'"
以下を実行することもできます:
DESCRIBE INDEXES FOR TABLE SCHEMA.TABLE SHOW DETAIL
以下のコマンドでインデックスの詳細を取得できます。
describe indexes for table schemaname.tablename show detail
これは、使用しているDB2のバージョンによって異なります。 v7r1m0があり、次のクエリは非常にうまく機能します。
WITH IndexCTE (Schema, Table, Unique, Name, Type, Columns) AS
(SELECT i.table_schema, i.Table_Name, i.Is_Unique,
s.Index_Name, s.Index_Type, s.column_names
FROM qsys2.SysIndexes i
INNER JOIN qsys2.SysTableIndexStat s
ON i.table_schema = s.table_schema
and i.table_name = s.table_name
and i.index_name = s.index_name)
SELECT *
FROM IndexCTE
WHERE schema = 'LIBDEK'
AND table = 'ECOMROUT'
CTEに詳しくない場合は、知っておく価値があります。 AS400の命名規則はひどいので、CTEを使用してフィールド名を正規化しています。最終的にCTEのライブラリを作成し、それをすべてのクエリの先頭に自動的に追加しました。
すべてのインデックスを表示するには:-
select * from user_objects
where object_type='INDEX'
テーブルのインデックスとその列を表示するには:
select * from USER_IND_COLUMNS where TABLE_NAME='my_table'
もう1つの方法は、テーブルのDDLを生成することです。インデックスを含むテーブルの完全な説明が表示されます。
テーブルを右クリックして、DDL /スクリプトの生成をクリックします。
ほとんどのデータベースで機能します。
IBM Db2 on Cloud(以前のDashDb)のテーブルのインデックスをチェックするには、次のクエリで実行する必要があります。
_SELECT * FROM SYSCAT.INDEXES WHERE TABNAME = 'my_tablename' AND TABSCHEMA = 'my_table_schema'
_
インデックス名によるチェックも使用できます。
SELECT COUNT(*) FROM SYSCAT.INDEXES WHERE TABNAME = 'my_tablename' AND TABSCHEMA = 'my_table_schema' AND INDNAME='index_name'
SYSIBM.SYSINDEXESを使用しても同じ結果が得られます。ただし、この表は製品ドキュメントページで直接参照されていません。
SELECT COUNT(*) FROM SYSIBM.SYSINDEXES WHERE TBNAME = 'my_tablename' AND TBCREATOR = 'my_table_schema' AND NAME='my_index_name'
SYSCAT.INDEXESカタログビュー を参照してください。