1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

経緯

Railsチュートリアルを進めていく中で、マイグレーションファイルにadd_indexという記述を行なっていましたが、具体的に使い方がいまいちわからなかったため、調べた結果をまとめます。

add_indexがなぜ必要なのか

結論から言うと、データベースの処理を高速化できるから。
通常該当のデータをデータベースから検索する際には、DBは1から10まで全てのデータを検索し、該当のデータが存在するかどうかを検索します。(フルスキャン)
add_indexがあると、検索しやすいようにデータを並び替え、必要なデータを取得しやすくできるようになります。(木構造という検索方法でデータを並び替えています。このあたりの説明は、アルゴリズムのお話になるので今回は省略します。)
Railsチュートリアルでは、Twitterのようなユーザーをフォローする機能、される機能を作成していますが、これらを登録するカラムを作成する際に、インデックスを設定しています。高い頻度でアクセスするこれらのデータに追加することで、DBにかかる負荷を軽減し、レスポンスを高速でできるようになります。

class CreateRelationships < ActiveRecord::Migration[7.0]
  def change
    create_table :relationships do |t|
      t.integer :follower_id
      t.integer :followed_id

      t.timestamps
    end
    add_index :relationships, :follower_id
    add_index :relationships, :followed_id
    add_index :relationships, [:follower_id, :followed_id], unique: true
  end
end

まとめ

add_indexを追加することで、データベースの処理を高速化できることがわかりました。
ただし、データの数がそもそも少ない場合は、フルスキャンの方が短時間で検索することができます。
実際に作成するデータの規模に合わせて実装することが大事だということがわかりました。

参考
【Rails】 マイグレーションファイルを徹底解説!
【Rails】一意性を設定するのにuniqueness: trueだけで満足してはいけない

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?