获取 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 上的索引列的主要内容,如果未能解决你的问题,请参考以下文章

DB2:需要获取给定db2表的列列表和不同的值计数

如何在 DB2 Sql 中的上一列下方获取下一列的值

从DB2列获取子字符串

如何从托管在 Websphere 6.1 上的 DB2 数据库获取 XADatasource

通过 API 从云上的 DB2 获取 SQL 结果到 Power Query

【DB2】SQL优化