web-dev-qa-db-ja.com

DB2のテーブルで使用可能なすべてのインデックスを見つけるにはどうすればよいですか

Db2のテーブルで使用可能なすべてのインデックスを見つける方法は?

14
Rumik
db2 "select * from syscat.indexes where tabname   = 'your table name here' \
                                  and   tabschema = 'your schema name here'"
27
Ingo

以下を実行することもできます:

DESCRIBE INDEXES FOR TABLE SCHEMA.TABLE SHOW DETAIL
16
Ian Bjorhovde

以下のコマンドでインデックスの詳細を取得できます。

describe indexes for table schemaname.tablename show detail
1
Dhanish Jose

これは、使用している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のライブラリを作成し、それをすべてのクエリの先頭に自動的に追加しました。

1
D. Kermott

すべてのインデックスを表示するには:-

select * from user_objects
where object_type='INDEX'

テーブルのインデックスとその列を表示するには:

select * from USER_IND_COLUMNS where TABLE_NAME='my_table'
1
Umang Pareek

もう1つの方法は、テーブルのDDLを生成することです。インデックスを含むテーブルの完全な説明が表示されます。

テーブルを右クリックして、DDL /スクリプトの生成をクリックします。

ほとんどのデータベースで機能します。

0
Vikas Jain

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カタログビュー を参照してください。

0
adtanasa