如何使用活动记录在联接中指定'USE INDEX'



当多个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
希望这样的事情是可能的?

Rails不支持这种开箱即用的连接。但是你总是可以写一个字符串传递给joins,准确地描述你想要的:

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

我使用posts, userscomments代替table1table3,因为table1等不遵循Rails命名约定。