📘

ユニーク性を担保するのに複合インデックスは適切なのか

に公開

Daily Blogging83日目

新しくテーブルを作成するときに、二つのカラムの組み合わせがユニークになるようにしたい。
だから複合インデックスを作成してユニークさを担保するのはどうだろうって意見が出た。

結論

今回は、ユニーク性の担保のために複合インデックスを作成するのはやめた。
その代わりに、Railsの機能にあるvalidatesを使ってユニーク性を担保することにした。

こういう感じで

class YourModel < ApplicationRecord
  validates :column1, uniqueness: { scope: :column2 }
end

理由

複合インデックスをやめた理由がこちら

  • お試し機能なので、いきなりデータ量が増えない想定
  • 主目的がユニーク性の担保
  • 今不要なインデックスの削除中

お試し機能なので、いきなりデータ量が増えない想定

データ量が少ない状態でインデックスが採用されると、逆にパフォーマンスが落ちる可能性があるので逆効果になる

主目的がユニーク性の担保

そもそもやりたいことは検索性能の向上じゃなくてユニーク性の担保なので、インデックスは過剰かなと

今不要なインデックスの削除中

すでに存在しているインデックスを削除するのは結構気を使うので、現時点で恩恵がそこまで感じられないインデックスを増やすのは得策じゃない
必要性を感じてからインデックスを導入するでも良い

Discussion