パフォーマンスのためにデータベースインデックスを設計する
インデックスは読み取りを高速化する一方、書き込みを遅くします。B-tree、ハッシュ、複合、部分インデックスの特徴と、それぞれを使うべき場面を学びましょう。
- 1
インデックスの種類:B-tree(既定、範囲と等値をサポート)、Hash(等値のみ、より高速)、GIN/GiST(全文検索、幾何)、複合(複数列、順序が重要)。インデックスは WHERE、JOIN、ORDER BY、GROUP BY を高速化しますが、INSERT/UPDATE/DELETE(インデックスの保守)は遅くなります。選択的にインデックスを作成してください。すべてのインデックスにはコストが伴います。
- 2 SQL フォーマッター →
CREATE INDEX ステートメントを整形します。複合インデックスでは、等値条件を最初に、次に範囲条件、次にソート列を置いてください。例:WHERE customer_id = ? AND status = ? ORDER BY created_at に対して、CREATE INDEX ON orders (customer_id, status, created_at)。
よくある質問
- 複合インデックスの列の順序はどう選べばよいですか?
- 最も選択性の高い列(カーディナリティが最も高い)を最初に置きます。WHERE 句では、等値条件を範囲条件の前に置きます。クエリ WHERE a = 1 AND b > 2 ORDER BY c には (a, b, c) を使います。先頭の列はクエリと一致していなければなりません。(b, a) のインデックスは WHERE a = 1 を効率的に処理できません。
- 部分インデックスはいつ使うべきですか?
- 行のサブセットを頻繁にクエリする場合です。CREATE INDEX ON orders (customer_id) WHERE status = 'active' は、アクティブな注文だけをインデックス化します。より小さく、速く、書き込みのオーバーヘッドも少なくなります。小さなサブセット(アクティブユーザー、未払いの請求書、最近のレコード)に対するよくあるクエリに使ってください。
このタスクを解決するワークフロー
関連ツール
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%クライアントサイド。 ツール