2010-05-20 267 views

回答

23
db2 "select * from syscat.indexes where tabname = 'your table name here' \ 
            and tabschema = 'your schema name here'" 
+0

在我的情況下,名字是'tbname'。 – Uooo 2013-10-15 08:56:53

+2

對於我的as400 db2數據庫,我需要查詢: select * from qsys2.systables WHERE Table_schema ='schema name'AND table_name ='Table name' – YLombardi 2015-04-23 15:22:57

+2

@YLombardi或更確切地使用qsys2.sysindexes表(對於as400) – AtliB 2015-05-29 11:56:23

12

你也可以執行:

DESCRIBE INDEXES FOR TABLE SCHEMA.TABLE SHOW DETAIL 
+4

請注意,'describe'命令僅適用於DB2客戶端,而不是通過JDBC或其他接口,因爲它不是標準的SQL。 – sventechie 2013-05-20 20:25:56

+0

+1對於SHOW DETAIL – Ashley 2013-11-20 20:56:50

0

另一種方式是生成表的DDL。 它會給你表的完整描述,包括它的索引。

只需右鍵單擊表並單擊生成DDL /腳本。

適用於大部分數據庫。

1

您可以使用以下命令獲取索引的詳細信息。

describe indexes for table schemaname.tablename show detail 
+0

@ProgramFOX給出的是tha問題的答案! – 2013-12-31 10:56:31

+0

好的,因爲該命令沒有被格式化爲代碼,我以爲你要求澄清。 – ProgramFOX 2013-12-31 11:00:42

1

要查看所有索引: -

select * from user_objects 
where object_type='INDEX' 

要查看錶的索引及其列:

select * from USER_IND_COLUMNS where TABLE_NAME='my_table' 
0

這取決於你所使用的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庫,並將其自動附加到所有查詢的頂部。

+0

什麼是'qsys2'? – david 2017-07-22 05:32:29

+0

qsys2是一個庫。您可以將其視爲sql server中的主數據庫。 – 2017-07-24 14:30:15

相關問題