1、要查看 Oracle数据库中单表的索引,可以使用如下 SQL 语句:
SELECT i.TABLE_NAME,i.OWNER,i.INDEX_NAME, i.uniqueness,
LISTAGG(ic.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY ic.COLUMN_POSITION) AS COLUMN_NAMES
FROM ALL_INDEXES i
JOIN ALL_IND_COLUMNS ic ON i.INDEX_NAME = ic.INDEX_NAME
WHERE i.TABLE_NAME =UPPER('table')
GROUP BY i.TABLE_NAME, i.OWNER,i.INDEX_NAME, i.uniqueness;
2、要查看 Oracle数据库中多表的索引,可以使用如下 SQL 语句:
SELECT i.TABLE_NAME,i.OWNER,i.INDEX_NAME, i.uniqueness,
LISTAGG(ic.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY ic.COLUMN_POSITION) AS COLUMN_NAMES
FROM ALL_INDEXES i
JOIN ALL_IND_COLUMNS ic ON i.INDEX_NAME = ic.INDEX_NAME
WHERE i.TABLE_NAME in(UPPER('table1'),UPPER('table2'),UPPER('table3'))
GROUP BY i.TABLE_NAME, i.OWNER,i.INDEX_NAME, i.uniqueness;
下面是每一列的含义解释:
-
i.TABLE_NAME:表示索引所属的表名。
-
i.OWNER:表示索引所属的表的所有者。
-
i.INDEX_NAME:表示索引的名称。
-
LISTAGG(ic.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY ic.COLUMN_POSITION) AS COLUMN_NAMES:使用LISTAGG函数将索引的所有列名串联起来,并以逗号分隔。ic.COLUMN_NAME表示索引的列名,ic.COLUMN_POSITION表示列在索引中的位置。
该查询从ALL_INDEXES表和ALL_IND_COLUMNS表中获取索引信息。ALL_INDEXES视图包含了数据库中所有索引的信息,而ALL_IND_COLUMNS视图则包含了索引列的信息。通过JOIN操作将这两个视图连接起来,然后根据指定的表名过滤结果,并使用GROUP BY子句将结果按照表名、所有者和索引名进行分组。
最终查询结果会返回每个索引所属的表名、所有者、索引名以及索引涉及的列名(以逗号分隔)。