4

我想做类似于http://www.bestbrains.dk/Blog/2010/03/25/HowToAssertThatYourSQLDoesNotDoFullTableScans.aspx中描述的事情,但为此我需要 postgres 来跟踪任何全表扫描做。postgres有这样的东西吗?

4

2 回答 2

6

查看pg_stat_get_numscans(oid)(表上的顺序扫描次数)和统计信息收集器(一般而言)。

于 2010-03-26T15:23:58.853 回答
1

我使用以下查询。如果索引使用率 > 99 我很好。所以我担心任何超过 7000 行且索引使用量少于 99 的表。

SELECT 
  relname table_name, 
  idx_scan index_scan,
  seq_scan table_scan,
   100*idx_scan / (seq_scan + idx_scan) index_usage, 
  n_live_tup rows_in_table
FROM 
  pg_stat_user_tables
WHERE 
    seq_scan + idx_scan > 0 and 100 * idx_scan / (seq_scan + idx_scan) < 99 and
    n_live_tup > 70000
ORDER BY 
  4 DESC;

当然,您需要了解查询及其计划。有时表扫描可以更优化。

于 2021-11-22T14:20:44.453 回答