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

时间:2016-10-26 19:35:51

标签: mysql ruby-on-rails ruby activerecord indexing

当多个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

希望这样的事情可能吗?

1 个答案:

答案 0 :(得分:4)

Rails不支持开箱即用的连接。但是你总是可以写一个字符串到joins来描述你想要的东西:

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

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