用于查找和创建模式的缺少索引的脚本

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

我使用下面的脚本查找丢失的索引,但是对它进行了任何修改,以查找和创建索引创建语句或查找我们可以使用哪一列进行索引?

数据库: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;
postgresql postgresql-9.5
2个回答
0
投票

我认为该查询不是很有用。

更好的是

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

如果第二和第三列都很大,则缺少索引。


0
投票

我认为“ pg_stat_all_tables”中的任何内容都不能告诉您索引中可能缺少表的哪些列。我通常建议使用慢速查询日志(auto_explain)来标识可能需要索引的查询,而不是pg_stat_all_tables来标识可能需要索引的查询。这样,查询的性质通常会使该列变得明显。如果要查看是否使用特定的索引,可以尝试hypopg,但需要指定列,它不会为您选择它们​​。

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