SQL 列举索引列,你想列出某个表的索引,包括构成索引的各列及其位置序号(如果有的话)。
SQL 列举索引列 问题描述
你想列出某个表的索引,包括构成索引的各列及其位置序号(如果有的话)。
SQL 列举索引列 解决方案
下面的解决方案因数据库的不同而有所差异,但都假设你希望列出 SMEAGOL 模式中的 EMP
表的索引信息。
DB2
查询 SYSCAT.INDEXES
。
1 select a.tabname, b.indname, b.colname, b.colseq
2 from syscat.indexes a,
3 syscat.indexcoluse b
4 where a.tabname = 'EMP'
5 and a.tabschema = 'SMEAGOL'
6 and a.indschema = b.indschema
7 and a.indname = b.indname
Oracle
查询 SYS.ALL_IND_COLUMNS
。
select table_name, index_name, column_name, column_position
from sys.all_ind_columns
where table_name = 'EMP'
and table_owner = 'SMEAGOL'
PostgreSQL
查询 PG_CATALOG.PG_INDEXES
和 INFORMATION_SCHEMA.COLUMNS
。
1 select a.tablename,a.indexname,b.column_name
2 from pg_catalog.pg_indexes a,
3 information_schema.columns b
4 where a.schemaname = 'SMEAGOL'
5 and a.tablename = b.table_name
MySQL
使用 SHOW INDEX
命令。
show index from emp
SQL Server
查询 SYS.TABLES
、SYS.INDEXES
、SYS.INDEX_COLUMNS
和 SYS.COLUMNS
。
1 select a.name table_name,
2 b.name index_name,
3 d.name column_name,
4 c.index_column_id
5 from sys.tables a,
6 sys.indexes b,
7 sys.index_columns c,
8 sys.columns d.
9 where a.object_id = b.object_id
10 and b.object_id = c.object_id
11 and b.index_id = c.index_id
12 and c.object_id = d.object_id
13 and c.column_id = d.column_id
14 and a.name = 'EMP'
SQL 列举索引列 扩展知识
说到查询,很重要的一点是要知道哪些列有索引。为那些经常被用来过滤数据并且相当有区分度的列添加索引,有利于提升查询的效果。索引对表之间的连接查询也非常有帮助。了解哪些列被加入了索引,能够有效地避免潜在的性能问题。此外,你可能希望查找关于索引自身的一些信息:遍历深度有多少级,有多少个不同的键,有多少个叶节点,等等。可以通过本实例中的解决方案所查询的视图和表来获取这类信息。