SQL 查询检索公共模式中作为外键但没有索引的列名称

问题描述 投票:0回答:1

我正在努力优化我的 PostgreSQL 15 数据库中的数据库访问。我想识别 public 模式中的表中的列是 外键 not 有与它们关联的索引。这些信息将帮助我优先考虑添加索引以提高查询性能。有人可以提供一个 PostgreSQL 查询来返回这些列的表名和列名吗?

sql database postgresql indexing psql
1个回答
0
投票

开始的事情:

SELECT  conname AS fkey_constraint
    ,   relname AS tablename
    ,   attname AS columnname
    ,   format('CREATE INDEX idx_%s_%s_fkey ON %I.%I(%I);'
        , relname
        , attname
        , nspname
        , relname
        , attname
        ) AS index_proposal
FROM    pg_constraint
    JOIN pg_class ON  pg_class.oid = conrelid
    JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid
    JOIN pg_attribute ON  ARRAY[pg_attribute.attnum] <@ conkey AND pg_class.oid = pg_attribute.attrelid
    LEFT JOIN pg_index ON pg_class.oid = indrelid AND ARRAY[pg_attribute.attnum] = (string_to_array(pg_index.indkey::text, ' '))::smallint[]
WHERE   contype = 'f'
AND     indexrelid IS NULL
ORDER BY relname, conname, attname;

没有检查版本 15,但它应该适用于更旧的版本。上周在版本 16 上使用过它。

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