MW211 EXIT

devlog
PostgreSQL/ANALYZEとは(1)
2013年02月13日
「ANALYZE」は「統計情報」を最新に更新してくれる機能。

SQLでデータを読み込む時に、いろいろな方法がある。
目的地にたどり着くのにいろいろな経路があるようなものだ。

意識しなくても、一番最適な(最速な)経路をみつけてくれる(実行計画という)のだが、
その判断根拠となるのが、「統計情報」になる。

インプット情報が正しくなければ正しい結果は導き出せないので、
「統計情報」ってのはかなり大事だといえよう。

たいていは、「VACUUM」同様、都度、統計情報は最新に更新されるモードがとられるが、
任意で実行したい場合には「ANALYZE」を使う。

┌──────────────────────────────────────┐
│EXPLAIN SQL文;                                                              │
└──────────────────────────────────────┘
SQL文の先頭に「EXPLAIN」を付けて実行すると、実行計画が提示される。
┌──────────────────────────────────────┐
│… (cost=… rows=1234 …)                                                   │
└──────────────────────────────────────┘

さらに「EXPLAIN ANALYZE」にすると、実行計画の提示とともに
実際に実行してその見積もり(実行計画)がどうだったか教えてくれる。
┌──────────────────────────────────────┐
│EXPLAIN ANALYZE SQL文;                                                      │
└──────────────────────────────────────┘
こんな感じの結果となる。
┌──────────────────────────────────────┐
│… (cost=… rows=1234 …) (actual … rows=123456 …)                        │
└──────────────────────────────────────┘
「actual」(実際に)の後が、実際の結果だ。
見積もりでは「1234」だったのに、実際にやってみたら「123456」だった…って
見積もり大間違いじゃんというオチである。

ま、そんな時に「ANALYZE」を実行して、「統計情報」を最新にってことだ。

ちなみに、「ANALYZE」は全件調査するわけではなく、無作為抽出調査だ。
そのサンプル数を増やせば改善される場合もある。
分類:PostgreSQL