Railsマイグレーションのindexの定義方法と対象について

最近、railsを使い始めて、データベース設計をする機会がありました。その際にindexについての学びが多かったのでメモ。

 

indexとは?

テーブルの中の特定のカラムのデータを複製し、データを取得する際に検索が行いやすいようにしたものです。アルファベット順にnameを並べ替え検索しやすいようにしてくれます。

例えば Userの名前データを参照したい場合、Usersテーブルのnameカラムにindexを張ってないと、プログラムはUserテーブルのnameカラムを上から順にみて、そのユーザーのデータを取得します。データが多ければ多いほどすごく時間がかかります。

 

indexのメリット・デメリット

メリット:データの読み込み・取得が早くなる
デメリット:書き込みの速度が倍かかる

indexを貼り、カラムを検索しやすいように整理しデータの読み込み・取得が早くなる反面、そのカラムのデータを複製する処理が走るので、書き込みの速度に倍かかってしまいます。データ量の少ないテーブルやアクセスのないカラムに張っても、大した速度改善は見込めません。

 

indexをはる対象

ある程度多くのデータを格納するテーブルの、格納される値がそれぞれ異なるようなカラムの中で、検索がよく行われるカラムに対して張ると効果的です。
例) 外部キー、よく検索に使われるカラムなど

 

indexの貼り方

hogeテーブルにhugaテーブルの外部キーを追加する場合

class CreateHoges < ActiveRecord::Migration
	def change
		create_table :hoges do |t|
			t.references :huga, index: true, foreign_key: true, null: false
			t.string :title, null: false		
			t.timestamps null: false
		end
	end
end

 

コメント