如何在DB2中的表上找到所有可用的索引

时间:2010-05-20 11:04:16

标签: indexing db2

如何在db2中查找表中可用的所有索引?

7 个答案:

答案 0 :(得分:27)

db2 "select * from syscat.indexes where tabname   = 'your table name here' \
                                  and   tabschema = 'your schema name here'"

答案 1 :(得分:15)

您也可以执行:

DESCRIBE INDEXES FOR TABLE SCHEMA.TABLE SHOW DETAIL

答案 2 :(得分:1)

您可以使用以下命令获取索引的详细信息。

describe indexes for table schemaname.tablename show detail

答案 3 :(得分:1)

要查看所有索引: -

select * from user_objects
where object_type='INDEX'

要在表格中查看索引及其列:

select * from USER_IND_COLUMNS where TABLE_NAME='my_table'

答案 4 :(得分:1)

这取决于您使用的DB2版本。 我们有v7r1m0,以下查询工作得很好。

WITH IndexCTE (Schema, Table, Unique, Name, Type, Columns) AS
   (SELECT i.table_schema, i.Table_Name, i.Is_Unique, 
           s.Index_Name, s.Index_Type, s.column_names
    FROM qsys2.SysIndexes i
    INNER JOIN qsys2.SysTableIndexStat s
    ON i.table_schema = s.table_schema
    and i.table_name = s.table_name
    and i.index_name = s.index_name)
SELECT * 
FROM IndexCTE 
WHERE schema = 'LIBDEK' 
AND   table = 'ECOMROUT'

如果您不熟悉CTE,他们值得了解。我们的AS400命名惯例很糟糕,因此我一直在使用CTE来规范化字段名称。我最终创建了一个CTE库并让它自动附加到我的所有查询的顶部。

答案 5 :(得分:0)

另一种方法是生成表的DDL。 它将为您提供表格的完整描述,包括索引。

右键单击表格,然后单击生成DDL /脚本。

适用于大多数数据库。

答案 6 :(得分:0)

为了检查IBM Db2 on Cloud(以前是DashDb)上的表的索引,以下查询应该这样做:

SELECT * FROM SYSCAT.INDEXES WHERE TABNAME = 'my_tablename' AND TABSCHEMA = 'my_table_schema'

您还可以使用索引名称检查:

SELECT COUNT(*) FROM SYSCAT.INDEXES WHERE TABNAME = 'my_tablename' AND TABSCHEMA = 'my_table_schema' AND INDNAME='index_name'

使用SYSIBM.SYSINDEXES可以实现相同的结果。但是,此表未直接在产品文档页面上引用。

SELECT COUNT(*) FROM SYSIBM.SYSINDEXES WHERE TBNAME = 'my_tablename' AND TBCREATOR = 'my_table_schema' AND NAME='my_index_name'

请参阅SYSCAT.INDEXES catalog view