【问题标题】:Get columns of index on DB2获取 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

【问题讨论】:

    标签: sql indexing db2


    【解决方案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; 
    

    【讨论】:

    【解决方案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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-15
          • 2020-08-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多