0
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 使いどころをアプリ開発と照らして考えてみたい

Last updated at Posted at 2025-05-22

『indexって何?』

〜使いどころをアプリ開発と照らして考えてみたい〜

はじめに

開発中のアプリで「indexって付けたほうがいいのかな?」と悩みました。
調べるうちに、indexは便利だけど万能ではないということ、ちゃんと理解して張らないと逆効果になることもあると知り、この記事を自分への備忘録として残しておきます。


そもそもindexってなに?

index(インデックス)とは、データベースの「検索用の目次」みたいなもの。
大量のデータから特定の値を探すときに、パッと探せるようになるらしい。

例:ユーザー名から検索したいとき

User.find_by(name: "千葉さん")

nameindexを張っていないと、全ユーザーのnameを順番に1つずつ見ていく処理(全件検索)となる。
これが、たくさんいたら時間がかかる。
indexを張っておくと、アルファベット順やあいうえお順に並んだ「目次」から即検索できるようになって、読み込みが速くなる。

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

メリット デメリット
検索が爆速になる 書き込み(INSERT/UPDATE)が遅くなる
find_bywhere の検索が高速化 使わないカラムに張っても意味がない
重複禁止(unique)にも使える テーブル構造が複雑になることも

Railsでのindexの張り方

マイグレーションファイルを作成

rails generate migration add_index_to_users_email

中身はこうなる

class AddIndexToUsersEmail < ActiveRecord::Migration[6.0]
  def change
    add_index :users, :email, unique: true
  end
end

自分のアプリでの使い所を考える

私のアプリでは、日々の記録を蓄積し、必要に応じて共有できる設計を考えています。
その中で、indexをどこに張るべきかを様々な記事を読み悩みました。

使ってみたいと考えたときのindex

  • users.email→ Deviseでログインに使うので、必ず検索される。UNIQUE付きで張る
  • records.user_id→ ユーザーごとの記録を一覧表示するので、検索高速化に必要かなあと思う。
  • departments_users.department_id→ 特定のカテゴリで絞り込む操作があるため、張っておこうかな。

いらなそう

  • users.notification_enabled(boolean)true/falseの2値しかないので意味がない
  • tags.name→ 検索頻度が低い場合は優先度低め

最後に自分へ一言

「全部にindex張らないようにs」
ちゃんと使い所を見極めて張る。
これからも、読み込み・書き込みのバランスを考えながら設計していく。

参考

楽々ERDレッスン
参考
参考

0
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
0
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?