【入門編】 統計情報とANALYZE – PostgreSQL

こんにちは!データベースの世界へようこそ。

今日は、PostgreSQLという「優秀な料理長」が、どうやって効率よく料理(クエリ)を作っているのか、その裏側の秘密を覗いてみようと思います。

データベースを触り始めたばかりの頃、「なぜか検索が遅いな?」と感じたことはありませんか?実はそれ、料理長が「冷蔵庫の中身」を把握できていないせいかもしれません。

—

料理長は「メモ帳」を頼りにしている

PostgreSQLには「クエリプランナー」という頭脳明晰なシェフがいます。彼がSQLという注文を受けると、「どうやって一番速くデータを取り出そうかな?」と瞬時に計算します。

でも、彼も人間(…じゃないけれど)ですから、すべてを暗記しているわけではありません。そこで役立つのが「統計情報」というメモ帳です。

このメモ帳には、こんなことが書かれています。

  • このテーブルには、全部で何行データがあるか?
  • 「名前」の列には、どれくらい重複したデータがあるか?
  • どの値がよく検索されるか?

もしこのメモ帳が古かったら?「あ、最近仕入れた食材(データ)の在庫数を把握してなかった!」と、シェフは勘違いして、非効率な手順で料理を作ってしまうことになります。これが「クエリが遅い」原因の正体です。

—

ANALYZEってなに?

この「メモ帳」を最新の状態に更新する魔法のコマンド、それが `ANALYZE` です。

イメージとしては、シェフが「よし、ちょっと冷蔵庫の在庫チェックをしよう!」と言って、中身を再確認する作業のこと。これを実行することで、PostgreSQLはテーブルの状況を正確に把握し、最適な実行計画を立てられるようになります。

「自動」でやってくれることもあるけれど…

PostgreSQLには「オートバキューム」という便利な機能があって、データがたくさん増えたり更新されたりすると、勝手に`ANALYZE`を実行してくれる賢い仕組みがあります。

でも、以下のタイミングでは、自分から「おい、今すぐ確認して!」と声をかけてあげたほうがいいこともあります。

  • 大量のデータを一気にインポートした直後:

急に冷蔵庫にトラックいっぱいの食材が届いたような状態です。シェフに「これ全部使っていいよ!」と教えてあげないと、彼は混乱してしまいます。

  • データの傾向がガラリと変わったとき:

例えば、それまで数件しかデータがなかったテーブルに、数万件のデータが入った場合などです。

—

統計情報の正体「pg_statistic」

データベースの中には、このメモ帳の中身を覗ける場所があります。それが `pg_statistic` というシステムカタログ(ビュー)です。

ただ、正直に言うと、ここを直接眺めるのはちょっと上級者向けです。なぜなら、中身は人間には少し読みづらい形式で保存されているからです(笑)。

でも、知っておいてほしいのは「ここにシェフが愛用する『統計情報』という名の攻略本が眠っている」ということだけ。データベースのパフォーマンスチューニングの第一歩は、ここを信頼できる状態に保つことから始まります。

—

今日のまとめ

  • クエリプランナー(シェフ)は、統計情報(メモ帳)を見て計画を立てている。
  • データが大きく変わったら、`ANALYZE`でメモ帳を更新してあげよう。
  • そうすれば、シェフは常に最高のパフォーマンスで料理を提供してくれる!

「最近、なんだかクエリの動きが鈍いな?」と思ったら、慌ててインデックスを追加する前に、まずは「`ANALYZE テーブル名;`」と唱えてみてください。それだけで、まるで魔法のように検索が速くなることも珍しくありません。

データベースと仲良くなるコツは、シェフであるPostgreSQLに「今の状況」をこまめに伝えてあげること。そうすれば、きっとあなたの頼もしいパートナーになってくれるはずですよ!

それでは、また次回の記事でお会いしましょう!

コメント

タイトルとURLをコピーしました