获取DB2上的索引列

时间:2014-02-21 07:00:01

标签: sql indexing db2

如何在DB2中获取表的索引所使用的列?

我试过了:

DESCRIBE INDEXES FOR TABLE 'MYTABLE' SHOW DETAIL;

但我收到错误消息

  

ILLEGAL SYMBOL“INDEXES”。一些可能是法律的符号:程序PROC。 SQLCODE = -104,SQLSTATE = 42601,DRIVER = 4.16.53

理想情况下,我想要一个表使用的所有索引及其相应列的信息。

我正在使用DB2 for z / OS V9.1

4 个答案:

答案 0 :(得分:1)

您可以使用此查询来显示表的索引及其列:

SELECT IX.tbname, 
       KEY.ixname, 
       KEY.colname 
FROM   sysibm.syskeys KEY 
       JOIN sysibm.sysindexes IX 
         ON KEY.ixname = IX.name 
WHERE  IX.tbname IN ( 'SOMETABLE', 'ANOTHERTABLE' ) 
ORDER  BY IX.tbname, 
          KEY.ixname, 
          KEY.colname; 

答案 1 :(得分:1)

SELECT * FROM SYSIBM.SYSKEYS WHERE IXNAME IN 
(SELECT NAME FROM SYSIBM.SYSINDEXES WHERE TBNAME = 'your_table_name') 

我测试了它,它给了我们索引中使用的所有列。

答案 2 :(得分:1)

您也可以使用以下查询。如果缺少syskeys表,它可以正常工作

SELECT * FROM SYSIBM.SYSINDEXCOLUSE其中INDNAME IN(SELECT SYS FROM SYSIBM.SYSINDEXES si其中si.TBNAME ='your_table_Name')ORDER BY INDNAME,COLSEQ

答案 3 :(得分:-1)

我在使用“KEY”作为表别名时遇到了问题。此外,如果您有多个具有相同表名的模式,请使用以下命令:

SELECT IX.TABLE_SCHEMA, IX.TABLE_NAME, IX.INDEX_NAME, KY.ORDINAL_POSITION, KY.COLUMN_NAME
  FROM SYSKEYS KY 
  JOIN SYSINDEXES IX ON (KY.INDEX_NAME = IX.INDEX_NAME AND KY.INDEX_SCHEMA = IX.INDEX_SCHEMA)
 WHERE IX.TBNAME = 'table-name' AND IX.TABLE_SCHEMA = 'table-schema'
 ORDER BY IX.TABLE_SCHEMA, IX.TABLE_NAME, IX.INDEX_NAME, KY.ORDINAL_POSITION
   FOR READ ONLY WITH UR