コンテンツへスキップ
uencoder

パフォーマンスのためにデータベースインデックスを設計する

インデックスは読み取りを高速化する一方、書き込みを遅くします。B-tree、ハッシュ、複合、部分インデックスの特徴と、それぞれを使うべき場面を学びましょう。

  1. 1

    インデックスの種類:B-tree(既定、範囲と等値をサポート)、Hash(等値のみ、より高速)、GIN/GiST(全文検索、幾何)、複合(複数列、順序が重要)。インデックスは WHERE、JOIN、ORDER BY、GROUP BY を高速化しますが、INSERT/UPDATE/DELETE(インデックスの保守)は遅くなります。選択的にインデックスを作成してください。すべてのインデックスにはコストが伴います。

  2. 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' は、アクティブな注文だけをインデックス化します。より小さく、速く、書き込みのオーバーヘッドも少なくなります。小さなサブセット(アクティブユーザー、未払いの請求書、最近のレコード)に対するよくあるクエリに使ってください。

このタスクを解決するワークフロー

関連ツール