使用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
方法......
答案 0 :(得分:1)
您可以使用:from属性来修改生成的SQL语句。我不确定你的表名是什么,所以在下面的代码片段中用表名替换“table”。
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.
我的环境中的FYI正确生成了SQL语句并成功运行,返回了预期的数据,但我没有确定的提示实际上正在使用提示。