小编典典

PostgreSQL索引使用率分析

sql

是否有工具或方法来分析Postgres,并确定应创建哪些缺少的索引,以及应删除哪些未使用的索引?我对SQLServer的“探查器”工具有一定的经验,但是我不知道Postgres附带的类似工具。


阅读 248

收藏
2021-04-15

共1个答案

小编典典

我喜欢这样来查找丢失的索引:

SELECT
  relname                                               AS TableName,
  to_char(seq_scan, '999,999,999,999')                  AS TotalSeqScan,
  to_char(idx_scan, '999,999,999,999')                  AS TotalIndexScan,
  to_char(n_live_tup, '999,999,999,999')                AS TableRows,
  pg_size_pretty(pg_relation_size(relname :: regclass)) AS TableSize
FROM pg_stat_all_tables
WHERE schemaname = 'public'
      AND 50 * seq_scan > idx_scan -- more than 2%
      AND n_live_tup > 10000
      AND pg_relation_size(relname :: regclass) > 5000000
ORDER BY relname ASC;

这将检查序列扫描是否比索引扫描更多。如果表很小,它将被忽略,因为Postgres似乎更喜欢对它们进行顺序扫描。

上面的查询确实揭示了丢失的索引。

下一步将是检测缺少的组合索引。我想这并不容易,但可行。也许分析慢查询…我听说pg_stat_statements可以帮助…

2021-04-15