エンジニア目指すほしこのブログ

エンジニアめざすほしこが学んだことや考えていることをアウトプットするブログです。現在27歳、小売業従事者。『アマゾンエフェクト!: 「究極の顧客戦略」に日本企業はどう立ち向かうか』著者: 鈴木 康弘 を読んでプログラミングに興味を持ちました。

インデックスについて(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設計の際に、どのカラムにインデックスを貼る必要があるかを考えなければならない。