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

Indexing 如何在DB2中找到表上可用的所有索引,indexing,db2,Indexing,Db2,如何在db2中查找表上可用的所有索引?您还可以执行: db2 "select * from syscat.indexes where tabname = 'your table name here' \ and tabschema = 'your schema name here'" DESCRIBE INDEXES FOR TABLE SCHEMA.TABLE SHOW DETAIL 另一种方法是生成表的DDL。

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

您还可以执行:

db2 "select * from syscat.indexes where tabname   = 'your table name here' \
                                  and   tabschema = 'your schema name here'"
DESCRIBE INDEXES FOR TABLE SCHEMA.TABLE SHOW DETAIL

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

只需右键单击table并单击generateddl/Scripts


适用于大多数数据库。

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

describe indexes for table schemaname.tablename show detail

要查看所有索引:

select * from user_objects
where object_type='INDEX'
要查看表上的索引及其列,请执行以下操作:

select * from USER_IND_COLUMNS where TABLE_NAME='my_table'

这取决于您使用的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库,并将其自动附加到我所有查询的顶部

要检查IBM Db2 on Cloud(以前是DashDb)上的表的索引,应使用以下查询:

从SYSCAT.index中选择*,其中TABNAME='my\u tablename'和TABSCHEMA='my\u table\u schema'

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

从SYSCAT.index中选择COUNT(*),其中TABNAME='my\u tablename'和TABSCHEMA='my\u table\u schema'以及INDNAME='index\u name'

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

从SYSIBM.sysindex中选择COUNT(*),其中TBNAME='my\u tablename'和TBCREATOR='my\u table\u schema'和NAME='my\u index\u NAME'


请参阅。

注意,“descripe”命令只能在DB2客户机中使用,不能通过JDBC或其他接口使用,因为它不是标准的SQL。@ProgramFOX给出了这个问题的答案!好的,因为命令没有被格式化为代码,所以我认为您要求澄清。对于我的as400 db2数据库,我需要查询:从qsys2.systables中选择*,其中Table_schema='schema name'和Table_name='Table name'@YLombardi,或者更确切地说,使用qsys2.sysindexes表(对于as400)什么是
qsys2
?qsys2是一个库。您可以将其视为sql server中的主数据库。
SYSCAT
目录视图应该在Linux/Unix/Windows平台上的Db2上使用,而不是
SYSIBM
DB2WarehouseonCloud是DB2forLinux。您应该使用
SYSCAT
视图,而不是底层表@PaulVernon感谢您指出使用目录视图而不是参考底图表。