前提
ある期間内のレコードを取得する以下のようなクエリがあるのですが、レコード数が増えたことで処理が完了するまで時間がかかるようになってきました。
そこで、インデックスを貼ろうと思っています。
貼るとしたら、start_timeかused_flgなのかなと思いました。
しかし、あまり変化はありませんでした。良い方法または改善があれば教えていただきたいです。。
・使用テーブル:histories
・結合するテーブル:users, stores
外部キー
・store_id, user_id
インデックス
・usersテーブル
key_name | colum_name |
---|---|
index_users_info | first_name |
index_users_info | last_name |
index_users_info | nick_name |
使用しているソースコード
Ruby
1// model histoy.rb 2 3def find_records(params) 4 record = self.joins(:user, :store) 5 .select('histories.*, users.first_name, users.last_name, users.nick_name, stores.name') 6 .where("first_name LIKE ?", "%#{first_name}%") 7 .where("last_name LIKE ?", "%#{last_name}%") 8 .where("nick_name LIKE?", "%#{nick_name}%") 9 .where("start_time BETWEEN '#{start_at} AND '#{end_at}'") 10 .where("used_flg LIKE ?", "%#{used_flg}%") 11 .order("start_time") 12 13 if params[:store].present? 14 record = record.where("store_id = ?", "#{store_id}") 15 end 16 return record 17end
試したこと
start_timeにインデックスを付けてなかったので、インデックスを貼りましたが処理時間はあまり変わりませんでした。
create indx start_at_for_find_record on histories(start_time)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。