如何在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
答案 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