2016-10-26 9 views
0

複数のJOINが存在する場合、JOINのインデックスを強制的にRailsのアクティブレコードで強制する方法はありますか?activerecordを使用してJOINで 'USE INDEX'を指定する方法

ように私は最後の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 

+0

どのデータベースですか?通常、データベースは索引の使用の有無を決定します。右側のフィールドに索引を作成し、データベースの照会プランナーが、提示した照会に対して索引が意味をなさないと考えると、索引が使用されます。 –

+0

@DaveSlutzkinこれはうれしいことですが、少なくとも、MySQLは既存のインデックスを使用する際には時にはひどい決定を下します。 – spickermann

+0

実際のクエリと「SHOW CREATE TABLE」を見てみましょう。多分、私たちは意図を達成するために何かを変えることができます。 –

答えて

4

Railsは、そのままの結合をサポートしていません。しかし、あなたは常に正確に何をしたいについて説明しjoinsに文字列を渡す書くことができます:table1などの命名規則のRailsに従っていませんので

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

私は、table3postsuserscommentsの代わりtable1を使用しました。

関連する問題