ruby 优化rails sql查询

xdnvmnnf  于 2022-11-04  发布在  Ruby
关注(0)|答案(1)|浏览(117)

我是一个初级开发人员,正在学习rails。我有一个查询数据库的代码,它运行得非常慢。

query = Users
  .select("user_id")
  .where(user_id: [array_of_ids], article_id: "article_id")
  .where("date IN (?)", @date_range)

query = query.where(store_id: [store_ids]) if store_ids.any?

我在article_id上建立了索引,在date上建立了索引,在user_id上建立了索引。但是这没有帮助,而且表很大。
您能帮助确定需要添加哪些索引来加快此查询吗?
尝试添加单个索引和复合索引。它对优化没有帮助。可能我有不正确的索引。

7kjnsjlb

7kjnsjlb1#

据我所知,如果MySQL在一个查询中对同一个表使用多个不同的索引,这取决于MySQL的版本。
在这个例子中,我将添加一个索引,如下所示(顺序很重要,可选列必须位于末尾):

add_index :users, [:user_id, :article_id, :date, :store_id], name: 'index_for_user_id_lookup'

请注意,您将为此索引给予一个自定义名称,因为自动生成的四列索引名称肯定会太长。
又吹毛求疵:查询并将其简化为

query = Users
  .select("user_id")
  .where(user_id: [array_of_ids], article_id: "article_id", date: @date_range)
query = query.where(store_id: [store_ids]) if store_ids.any?

相关问题