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などなどに頼りがちですが、やはり公式の資料はじっくり読んでおくべきだなぁとしみじみ思いました。