一意性uniqueに何故インデックスが必要なのか (Rails 総復習1ヶ月チャレンジ 15日目)
チャレンジ15日目です!今回はマイグレーションファイルを作成する中でよく使われるindexについてです。以前下記の記事内でも書いたのですが、一意性のバリデーションを検証するのに何故インデックスを貼る必要があるのか?が疑問になったので改めて補足です。
Rails 総復習1ヶ月チャレンジ 6日目(Railsチュートリアル編) - yama2_0506’s diary
index
指定したテーブルの指定したカラムにインデックスを付与するときに使います。 インデックスを設定するとデータを検索するときの速度を高速化することができます。
使い方例
add_index :テーブル名, :インデックスを付与するカラム名 [, オプション]) (例)add_index :boards, [:user_id, :created_at]
とここまでは前回勉強した時に覚えていたのですが、一意性のバリデーションをかける時にもindex使ってるけど、何故add_indexが必要なのか?別にnull: falseとかみたいにそれだけカラムの後ろに書けば良さそうなのにと思い調べることにしました。
一意性のuniqueをインデックスで設定する理由
こちらの記事が分かりやすかったです。
【Rails】 マイグレーションファイルを徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト
uniqueにインデックスを貼る理由としては、一意(すでに使われていないか)を調べるにはカラムの値を検索する必要があるため。その為インデックスを貼るのが一般的となっているようです。
なるほど・・・確かに検索する必要があるから、そこを高速化するためにindexを設定している訳ですね・・・!
記述例はこんな感じ
add_index :テーブル名, :カラム名, unique: true (例)add_index :users, :nickname, unique: true
今回は以上です!!
参考: