MySQL のインデックスの使用の仕組み
インデックスは特定のカラム値のある行をすばやく見つけるために使用されます。インデックスがないと、MySQL は関連する行を見つけるために、先頭行から始めてテーブル全体を読み取る必要があります。テーブルが大きいほど、このコストが大きくなります。テーブルに問題のカラムのインデックスが含まれている場合、MySQL はすべてのデータを調べる必要なく、データファイルの途中のシークする位置をすばやく特定できます。これはすべての行を順次読み取るよりはるかに高速です。
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 - インデックスに含まれるカラムの長さ
参考
データベースにindexを張る方法
https://qiita.com/seiya1121/items/fb074d727c6f40a55f22
mysql公式リファレンス
https://dev.mysql.com/doc/refman/5.6/ja/mysql-indexes.html
公式リファレンスほんとに優秀...