如何在db2中查找表中可用的所有索引?
答案 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'