Скрипт для поиска и создания отсутствующих индексов схемы - PullRequest
0 голосов
/ 18 марта 2020

Я использую приведенный ниже скрипт для поиска отсутствующих индексов, но есть какие-либо изменения в нем, чтобы найти и создать оператор создания индекса или найти столбец, с которым мы можем индексировать?

База данных: Postgres

SELECT 
relname AS TableName
,seq_scan-idx_scan AS TotalSeqScan
,CASE WHEN seq_scan-idx_scan > 0 
    THEN 'Missing Index Found' 
    ELSE 'Missing Index Not Found' 
END AS MissingIndex
,pg_size_pretty(pg_relation_size(relname::regclass)) AS TableSize
,idx_scan AS TotalIndexScan
FROM pg_stat_all_tables
WHERE schemaname='public'
AND pg_relation_size(relname::regclass)>100000 
ORDER BY 2 DESC;

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Я думаю, что этот запрос не очень полезен.

Лучше

SELECT relname,
       seq_scan,
       seq_tup_read / seq_scan AS tup_per_scan
FROM pg_stat_user_tables
WHERE seq_scan > 0;

Индекс отсутствует, если и второй, и третий столбцы большие.

0 голосов
/ 18 марта 2020

Я не думаю, что что-то в "pg_stat_all_tables" может сказать вам, какие столбцы таблицы могут отсутствовать в индексе. Как правило, я бы рекомендовал медленный журнал запросов ( auto_explain ) для определения запросов, для которых могут потребоваться индексы, а не pg_stat_all_tables для определения таблиц, которые могут это сделать. Характер запроса часто делает столбец очевидным. Если вы хотите узнать, будет ли использоваться указанный индекс c, вы можете попробовать hypopg , но вам нужно назначить столбцы, он не выберет их для вас.

...