【すろーくえり】
スロークエリ とは?
最終更新:
💡 実行に時間がかかりすぎる「遅いSQLクエリ」
実行に長い時間がかかるSQLクエリのこと。実行時間のログや実行計画を手掛かりに、クエリ・インデックス・待ち時間などの原因を調べて改善する。
📌 このページのポイント
スロークエリってどうやって見つけるの?
MySQL 8.4ではslow_query_logを有効にし、long_query_timeなどで記録条件を設定するよ。PostgreSQLではlog_min_duration_statementで指定時間以上かかった文を記録できるんだ
スロークエリの原因って何があるの?
スロークエリを見つけたらどう対処するの?
インデックスを付ければ全部速くなるの?
そうではないよ。多くの行を取得する場合は全体を読むほうが効率的なこともあるんだ。通常のB-tree索引では先頭がワイルドカードのLIKEは範囲検索に使いにくいなど、索引の種類と条件も関係するよ
もっと詳しく知りたい人へ
遅いSQLがMySQLのスロークエリログに出ないのはなぜ?
MySQL 8.4ではslow_query_logの有効化に加え、log_outputの出力先やlong_query_time、min_examined_row_limitなどの記録条件を確認してください。初期のロック取得時間は実行時間に含まれず、管理用のSQLなどにも別の記録条件があります。長く待ったSQLがすべて同じ条件で記録されるわけではありません。
まとめ:ざっくりこれだけ覚えればOK!
「スロークエリ」って出てきたら「実行に時間がかかるSQL」と思えばだいたいOK!
📖 おまけ:英語の意味
「Slow Query」 = 遅い問合せ
💬 Slowは「遅い」、Queryは「問合せ」で、時間のかかるデータベースへの問合せを表す言葉だよ