Web・IT うんたらら

業務系とWeb系の狭間でIT業界を彷徨いながら備忘録と足跡を残していきます

PostgreSQLでCOPY FROM...で追加した後のパフォーマンスについて

PostgreSQLで大量のデータを追加する場合、INSERTよりもCOPY FROM ...コマンドで追加した方が圧倒的に高速なのはよく知られていますが、どうにもその後の運用におけるSQLのパフォーマンスが悪い…遅い!遅すぎる!と困っていました。
例えばウン1000万件のデータを投入した場合、

SELECT COUNT(*) FROM table

で全体の件数を出すのも数分かかるというありえないことに。
これはさすがにおかしい……ということで調べたところ、公式ドキュメントに解決法がしっかり書いてありました。
http://www.postgresql.jp/document/8.3/html/populate.html

ANALYZE table

上記コマンドでテーブルの統計情報を明示的に再生成することで解決。
まぁ時間が経てばそのままでもAUTO VACUUMがなんとかしてくれるぽいですが……。

この業界、困ったことがあると、何かとGoogle先生やStack Overflow、最近ではQiitaなどなどに頼りがちですが、やはり公式の資料はじっくり読んでおくべきだなぁとしみじみ思いました。