如何了解PostgreSQL和Oracle中的禁用/启用索引

问题描述 投票:-1回答:2

我想知道在PostgreSQL和Oracle中禁用/启用的索引列表。有人可以向我建议查询吗?

我有这样的查询SQL Server

SELECT *
FROM sys.indexes I
INNER JOIN sys.tables T ON I.object_id = T.object_id
WHERE I.type_desc = 'NONCLUSTERED'
AND I.name IS NOT NULL
AND I.is_disabled = 1` 

我正在寻找类似的PostgreSQL和Oracle查询。

oracle postgresql
2个回答
0
投票

使用UserIndexes表

     select INDEX_NAME, TABLE_OWNER, 
      TABLE_NAME, UNIQUENESS from 
       USER_INDEXES u inner join  
        all_tables a
       On u.table_name=a.table_name
        and u.table_owner=a.owner

对于所有索引,将表名替换为all_indexes并加入dba_tables


0
投票

您可以将其用于postgres:

SELECT
    trel.relname AS table_name,
    irel.relname AS index_name,
    string_agg(a.attname, ', ' ORDER BY c.ordinality) AS columns
FROM pg_index AS i
         JOIN pg_class AS trel ON trel.oid = i.indrelid
         JOIN pg_class AS irel ON irel.oid = i.indexrelid
         JOIN pg_attribute AS a ON trel.oid = a.attrelid
         JOIN LATERAL unnest(i.indkey)
    WITH ORDINALITY AS c(colnum, ordinality)
              ON a.attnum = c.colnum
WHERE i.indisvalid -- WHERE not i.indisvalid
GROUP BY i, trel.relname, irel.relname;

注意,在postgres中禁用索引意味着不断更新,而无需使用它进行查询。

© www.soinside.com 2019 - 2024. All rights reserved.