2

Rails 2.3.4 を使用して、データベース オプティマイザにヒントを渡すことは可能ですか? テスト目的で特定のインデックスの使用を強制できるようにしたいと考えています。

私は持っています(レガシーコード、はい、においがします):

with_exclusive_scope {
  succeeded.average(:elapsed,
                    :conditions => ["date between ? and ? ", month_start, month_end],
                    :joins =>["LEFT OUTER JOIN update_phases proot on (updates.id=proot.update_id AND proot.phase_id=#{UpdatePhaseType.find_by_name("update").id} and proot.started_at between '#{month_start.to_s(:db)}' and '#{month_end.to_s(:db)}')",
                              "INNER JOIN profiles ON updates.profile_id = profiles.id and profiles.customer_instance_id=#{customer_instance.id}"],
                    :group =>'date', :order =>'date')
}

条項force index for join(profile_date_state_activity)の最後までタックできるようにしたいと考えています。FROM

それができない場合は、方法が必要average_by_sqlです...

4

1 に答える 1

1

:from 属性を使用して、生成される SQL ステートメントを変更できます。ここにあるテーブル名がわからないので、以下のスニペットで「テーブル」をそのテーブル名に置き換えます。

with_exclusive_scope {
  succeeded.average(:elapsed,
                    :from => "table force index for join(profile_date_state_activity)",
                    :conditions => ["date between ? and ? ", month_start, month_end],
                    :joins =>["LEFT OUTER JOIN update_phases proot on
                    etc.

参考までに、私の環境では、SQL ステートメントは正しく生成され、正常に実行され、期待されるデータが返されましたが、ヒントが実際に使用されているという決定的な証拠はありません。

于 2011-06-06T23:12:37.063 に答える