如何使用 activerecord 在 JOIN 中指定“USE INDEX”

Rob*_*ams 0 ruby mysql indexing activerecord ruby-on-rails

JOIN当有多个记录时,有没有办法强制在 Rails 中的活动记录上建立索引JOIN当存在

我希望最终的 SQL 生成为:

SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id
INNER JOIN table3 USE INDEX('my_index')
ON table2.new_id = table3.new_id
Run Code Online (Sandbox Code Playgroud)

希望这样的事情是可能的吗?

spi*_*ann 6

Rails 不支持像开箱即用的连接。但您始终可以编写传递一个字符串来joins准确描述您想要的内容:

Post
  .joins(:author)
  .joins("INNER JOIN comments USE INDEX('myindex') ON comments.post_id = posts.id")
Run Code Online (Sandbox Code Playgroud)

我使用posts,users代替to ,因为etc. 不遵循 Rails 命名约定commentstable1table3table1