是否可以将提示传递给数据库?

时间:2011-06-06 18:53:25

标签: ruby-on-rails ruby-on-rails-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方法......

1 个答案:

答案 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语句并成功运行,返回了预期的数据,但我没有确定的提示实际上正在使用提示。