私は、同じ結果セットを返すのPostgreSQL 8.3.14でクエリを比較しています。クエリの効率を正確に測定するにはどうすればよいですか?
私は、推定総コストを追跡するために、私のクエリにEXPLAIN
を使用しています。また、クエリを数回実行し、実行に要した合計時間を記録しました。連続して実行すると、より多くのデータがキャッシュされ、実際のキャッシュなしのランタイムが歪むことが理解されます。
それでも私はEXPLAIN
コストが(キャッシュスキュー付き)合計ランタイムに多少比例することになることを期待します。
私のデータはこれを否定しています。私は4つのクエリを比較しました。
- クエリA
- 総コスト:119 500
- 平均実行時間:28.101秒
- クエリB
- 総コスト:115 700
- 平均実行時間: 28.291秒
- クエリC
- 総コスト:116 200
- 平均実行時間:32.409秒
- クエリD
- 総コスト:93 200
- 平均実行時間:37.503秒
質問が最後に実行されました。何かがキャッシュ問題のために最速になるはずです。
[SO]:See and clear Postgres caches/buffers?
はどうすれば最も効率的などのクエリで測定することができます:キャッシュなしでクエリを実行しているので、このQ + Aに基づいて困難であると思われますか?
ドキュメントは、 'VACUUM ANALYZE [table]'は、私が含むすべてのテーブルの統計を更新すると言います。連続して実行するたびにより良い統計が得られるため、クエリの比較がスキューすることがあります。 –