遅い SQL クエリを最適化する
EXPLAIN による分析、インデックスの最適化、クエリの書き換えテクニックを使って、遅い SQL クエリを特定して修正します。
- 1
クエリ最適化の手順: (1) EXPLAIN ANALYZE を実行して実行プランを確認する。(2) 大きなテーブルでのシーケンシャルスキャンを探し、インデックスを追加する。(3) 結合方式を確認する — 大きなテーブルではネステッドループは遅い。(4) JOIN の前に WHERE で作業セットを減らす。(5) SELECT * を避け、必要な列だけを取得する。(6) ページネーションには OFFSET ではなく LIMIT ベースの方式を使う。
- 2 SQL フォーマッター →
分析の前にクエリを読みやすく整形します。適切に整形されたクエリは非効率の発見を容易にします。WHERE 句の欠落、不要なサブクエリ、冗長な JOIN などです。整形は、クエリと EXPLAIN 出力を突き合わせるときにも役立ちます。
- 3 sql-format → word-count
SQL 整形ワークフローを使って、クエリを整形・分析・ドキュメント化します。一貫したインデント付きの整然とした読みやすいクエリが得られ、最適化しやすくなります。
よくある質問
- インデックスはいつ追加すべきですか?
- WHERE、JOIN、ORDER BY 句で使われる列にインデックスを追加してください。複数列の条件には複合インデックスを使います (順序が重要 — 等値条件を先頭に)。カーディナリティの低い列 (真偽値、性別など) へのインデックスは避けてください。ほとんど役に立たないためです。インデックスの使用状況を監視し、未使用のインデックスは削除します (書き込みが遅くなるため)。
- ページネーションで OFFSET が良くないのはなぜですか?
- OFFSET は、行を走査して捨てることでスキップします。LIMIT 10 で 1000 ページ目を取ると 10,010 行を走査します。代わりに keyset ページネーション (WHERE id > last_id ORDER BY id LIMIT 10) を使ってください。必要な 10 行だけを走査します。複雑なソート順には、複合カーソル (ソート列 + 一意 ID) を使います。
このタスクを解決するワークフロー
SQL フォーマットと単語統計によるドキュメント化
SQL クエリを整形し、その後フォーマットされた出力を単語統計で分析する。 パイプライン
Lorem Ipsum 生成と単語カウント
Lorem Ipsum テキストを生成し、その後単語をカウントする。 パイプライン
SQL フォーマットと構文検証
SQL クエリをフォーマットし、その後構文を検証する。 パイプライン
テキストのクリーンアップ後の単語統計分析
テキストをトリムして正規化し、その後単語/文字/行統計を計算する。 パイプライン
行の重複除去と単語カウント
行をソートして重複を除去し、その後残りの単語をカウントして簡単な在庫を得る。 パイプライン
テキストの小文字化と単語カウント
テキストのケースを正規化し、その後分析のために単語をカウントする。 パイプライン
URL 除去と単語カウント
テキストから URL を除去し、その後残りの単語をカウントする。 パイプライン
Title Case と単語カウント
Title Case に変換し、その後単語をカウントする。 パイプライン
テキストの折り返しと単語カウント
長いテキストを折り返し、その後結果の単語をカウントする。 パイプライン
関連ツール
SQL フォーマッター
Beautify or minify SQL queries online. Uppercase keywords, indent clauses, or compress to a single line。無料、プライベート、100%クライアントサイド。 ツール
JSON バリデーター
Validate JSON and pinpoint syntax errors by line and column。無料、プライベート、100%クライアントサイド。 ツール
正規表現テスター
Test regular expressions with match highlighting, capture groups, and replace preview。無料、プライベート、100%クライアントサイド。 ツール