【入門編】 EXPLAINオプション – PostgreSQL

「なぜかクエリが遅い…」そんな時の相棒!PostgreSQLのEXPLAINを使いこなそう

こんにちは!データベースエンジニアとして日々PostgreSQLと向き合っていると、たまに「このクエリ、なんでこんなに頑張ってるんだろう?」と首をかしげたくなる瞬間に遭遇します。

皆さんも、書いたはずのクエリが思ったより遅くて、「うーん、どうすれば速くなるんだ?」と悩んだことはありませんか?そんなとき、僕たちが真っ先に頼るのが「EXPLAIN」という魔法のコマンドです。

今日は、そのEXPLAINをさらに深掘りして、隠されたヒントを引き出すための「オプション」たちを、日常の例えを交えながら紹介していきますね。

—

EXPLAINは「料理のレシピ」の振り返り

まず、EXPLAINをイメージしてみてください。これは料理で言うところの「今日の調理工程の記録」です。「どの順番で野菜を切って、どのタイミングで火を入れたか」をPostgreSQLが報告してくれるものですね。

ただ、標準の `EXPLAIN` だけだと、正直なところ「なんとなくの手順」しか分かりません。そこで、オプションという名の「詳細カメラ」を回して、もっと詳しく見ていきましょう!

—

これで謎が解ける!おすすめオプションたち

1. `BUFFERS`:冷蔵庫をどれだけ開け閉めしたか?

これが一番重要かもしれません。「データを探すために、ディスクからどれだけ情報を引っ張り出したか」を教えてくれます。

  • 日常の例え: 料理中に冷蔵庫を何回開け閉めしたか。何度も開けるのは面倒ですよね。`BUFFERS` は「君、冷蔵庫を開けすぎてない?」と指摘してくれる、効率化の第一歩です。

2. `VERBOSE`:舞台裏まで見せちゃいます

標準だと省略されてしまう、カラム名や細かい条件式を全部表示してくれます。

  • 日常の例え: 料理のレシピで「野菜を刻む」としか書いていないところを、「どの包丁で、何ミリ幅で切ったか」まで事細かに書かれた裏設定資料です。

3. `COSTS`:手間賃はいくらかかった?

クエリを実行するのに、PostgreSQLが「これくらいの手間がかかるだろう」と予測した数値(コスト)を表示します。

  • 日常の例え: 料理にかかる「予想所要時間」。この数値が大きい箇所が、いわゆる「ボトルネック」。まずはここから改善のメスを入れるのが鉄則です。

4. `SETTINGS`:今日の「味付け」はどうしたの?

クエリを実行したときに、どんな設定(パラメータ)が使われていたかを表示します。

  • 日常の例え: 料理中に「今日は塩を少し多めに入れた」とか「強火で加熱した」といった、設定のメモ書きです。後から振り返ったときに「ああ、これが原因で味(速度)が変わったのか!」と気づくきっかけになります。

5. `WAL`:片付けの手間はどれくらい?

データベースが書き込みを行う際、実は裏で「作業記録」を書き留めています。これがWALです。

  • 日常の例え: 料理が終わった後の「洗い物」。どれだけ油汚れを飛ばして、後片付けが大変になったかを見せてくれます。

—

実践:全部乗せで見てみよう!

実際に試すときは、こんな風に書いてみてください。

EXPLAIN (ANALYZE, BUFFERS, VERBOSE, SETTINGS)
SELECT FROM users WHERE name = ‘田中さん’;

※ `ANALYZE` をつけると、実際に実行して計測してくれます。(データ更新系のクエリには注意してくださいね!)

この結果を眺めていると、最初は暗号のように見えていた数字や文字が、だんだんと「ここはもっと頑張れそうだな」「ここは意外とスムーズに終わってるな」という物語のように読めてくるはずです。

—

最後に:完璧を目指さなくても大丈夫

「全部のオプションを完璧に理解しなきゃ!」と気負う必要は全くありません。まずは `BUFFERS` を見て、「あ、無駄な読み込みをしてるな」と気づくだけでも、立派な一歩です。

データベースのチューニングは、宝探しのようなもの。EXPLAINという探知機を持って、ぜひ皆さんのクエリの奥深くに眠る「最適化のヒント」を見つけてみてくださいね。

また次の記事でお会いしましょう。ハッピー・クエリライフを!

コメント

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