データの読み込み速度を改善する上で、indexを張ることは非常に大切です。
ただし、張り方や張る箇所によっては、目に見えた改善が見られなかったり、むしろ速度が遅くなってしまうケースもあります。
そこで、indexへの理解を深めるべくindexの基礎的な内容を記します。
##1.indexってなんぞや
特定のカラムからデータを取得する際に、テーブルの中の特定のカラムのデータを複製し検索が行いやすいようにしたものです。
例えば、あるユーザーをバイネームで検索したい!となった際に、Usersテーブルのnameカラムにインデックスを張ってないと、プログラムは、Userテーブルのnameカラムを上から順にみて、そのユーザーのデータを取得します。もし、これが1万人もしくはそれ以上の大量のデータを含むカラムだったらどうでしょう。すごく時間がかかりますね。
Usersテーブルのnameカラムにindexを張ることで、アルファベット順にnameを並べ替え検索しやすいようにしてくれます。
##2.indexのメリット・デメリット
1.でindexってすげー便利!じゃあ、全部のカラムに貼っちゃおう!と思ってしまいがちですが、もちろんメリットとデメリットがあります。
・メリット:データの読み込み・取得が早くなる。
・デメリット:書き込みの速度が倍かかる。
indexを貼り、カラムを検索しやすいように整理しデータの読み込み・取得が早くなる反面、そのカラムのデータを複製する処理が走るので、書き込みの速度に倍かかってしまいます。かつ、たいしたデータ量のやアクセスのないカラムに張っても、大した速度改善は見込めません。
なので、基本的にindexは、
###ある程度多くのデータを格納するテーブルの、格納される値がそれぞれ異なるようなカラムの中で、検索がよく行われるカラム
に対して張ると効果的です。
##3.indexを張ってみる
rails generate migration add_index_テーブル名_カラム名
をし、migrationファイルを作成します。
作成されたmigrationファイルの中身はこんな感じです。
class AddIndexToテーブル名 < ActiveRecord::Migration
def change
add_index :テーブル名, カラム名
end
end
indexに複数のカラムを設定する場合は
add_index テーブル名, [:カラム名1, :カラム名2, ・・・]
と書けばオーケーです。
###オプション
:name - インデックスの名前
:unique - trueを指定するとユニークなインデックス
:length - インデックスに含まれるカラムの長さ
最後にrake db:migrate
をお忘れなく。