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 语句。我不确定您的表名是什么,因此在下面的代码段中,将“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.

仅供参考,在我的环境中,SQL 语句已正确生成并成功运行,返回了预期的数据,但我没有确凿的证据证明该提示实际上正在被使用。

于 2011-06-06T23:12:37.063 回答