インデックスについて(rails、MySQL)
インデックスとは検索を高速化できるもの。カラムに貼ることができ、インデックスを貼ったカラムでの検索が高速になる。
【インデックスの貼り方↓】
ターミナルにて、rails g migration AddIndexToテーブル名
これでインデックスを追加するためのマイグレーションファイルができる。
マイグレーションファイルで、
class AddIndexToテーブル名 < ActiveRecord::Migration
def change
add_index :テーブル名, :カラム名
end
end
上記のように記述して、ターミナルでマイグレーションを実行する。
ちなみに複数のカラムにインデックスを貼る場合は、
add_index :テーブル名, [:カラム名, カラム名:]
このように記述。ただし、この方法でインデックスを貼った場合、カラム単体での検索では速度は向上しないので注意!
【インデックスのオプション】
以下のようなオプションもある。
length:
インデックスの長さを指定できる(先頭からその文字数だけがインデックスの対象となる)
unique:
一意性制約ができる。ちなみに、一意性制約はインデックスが必須となる(全てのデータを検索しないと、過去のデータと重複しているかわからないため)
add_index :テーブル名, :カラム名, unique: true
このように記述すれば一意性制約もかけられる
【インデックスのデメリット】
①データを保存、更新する速度が遅くなる
②データベースの容量を使う
以上のようなデメリットもあるので、安易にインデックスを貼ることはしない。DB設計の際に、どのカラムにインデックスを貼る必要があるかを考えなければならない。