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 に答える