获取 DB2 上的索引列
Posted
技术标签:
【中文标题】获取 DB2 上的索引列【英文标题】:Get columns of index on DB2 【发布时间】:2014-02-21 07:00:01 【问题描述】:如何在 DB2 中获取表索引使用的列?
我试过了:
DESCRIBE INDEXES FOR TABLE 'MYTABLE' SHOW DETAIL;
但我收到错误消息
非法符号“索引”。一些可能合法的符号是:PROCEDURE PROC。 SQLCODE=-104, SQLSTATE=42601, DRIVER=4.16.53
理想情况下,我想要一个表使用的所有索引及其对应列的信息。
我正在使用 DB2 for z/OS V9.1
【问题讨论】:
【参考方案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;
【讨论】:
但是 sysibm.syskeys 表在 DB2 9.7.x 中不存在 @dmitry_bond 也许准确¿对于 DB2 LUW?,但如何适用于 OP 的“我正在使用 DB2 for z/OS V9.1”? FWiW:"DB2 for Linux UNIX and Windows 9.7.0" AlternateZOSSysSchema IBM Data Server Driver configuration keyword: Set alternative schema to be searched in place of SYSIBM 和 SysSchema CLI/ODBC Config Kwd: Set alternative schema to be searched in place of the SYSIBM【参考方案2】:SELECT * FROM SYSIBM.SYSKEYS WHERE IXNAME IN
(SELECT NAME FROM SYSIBM.SYSINDEXES WHERE TBNAME = 'your_table_name')
我已经对其进行了测试,它为我们提供了索引中使用的所有列。
【讨论】:
【参考方案3】:您也可以使用以下查询。如果缺少 syskeys 表,它可以正常工作
SELECT * FROM SYSIBM.SYSINDEXCOLUSE where INDNAME IN (SELECT NAME FROM SYSIBM.SYSINDEXES si where si.TBNAME ='your_table_Name') ORDER BY INDNAME, COLSEQ
【讨论】:
【参考方案4】:我在使用“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
【讨论】:
以上是关于获取 DB2 上的索引列的主要内容,如果未能解决你的问题,请参考以下文章
如何从托管在 Websphere 6.1 上的 DB2 数据库获取 XADatasource