因此,我的rails代码生成了一个巨大的连接查询,该查询的开头如下:
SELECT "CREDITRSP"."ML_TRAN_ID" AS t0_r0,
...
...
...我注意到,当我在sql developer中运行此程序时,这需要大约5分钟。
尝试了以下备选方案,它们在3-10秒内返回结果:
1.SELECT /*+ FULL("CREDITRSP") */ "CREDITRSP"."ML_TRAN_ID" AS t0_r0,
...
...
2. SELECT /*+ INDEX("CREDITRSP" IDX2_CREDITRSP) */ "CREDITRSP"."ML_TRAN_ID" AS t0_r0,
...
...
3. SELECT /*+ ORDERED */ "CREDITRSP"."ML_TRAN_ID" AS t0_r0,
...
...上面3个选项中的任何一个都可以在rails中实现吗?
注意:我没有修改、更新、表模式迁移的控制权。此应用程序对这些表只有只读访问权限。
这是现有模型代码的一部分。
class Search
def search_by_date_range
get_transactions(FILTER_TO_SEARCH[self.filter])
end
FILTER_TO_SEARCH = {
Filter::AllTran => {
:filter => "all_tran.between_dates(self.start_date, self.end_date)",
:models => [
"credit_responses"
]
}
}
def get_transactions(search_hash={})
if (filter = search_hash[:filter])
trans = []
search_hash[:models].each do |m|
trans += eval("Terminal.#{m}.#{filter}")
end
[trans, nil]
else
[false, "Incorrect Filter"]
end
end
class Terminal < Tv2g::Base
self.table_name = "terminal"
has_many :credit_responses
end我使用的是Rails3和'activerecord-oracle_enhanced-adapter','1.4.2‘gem。
编辑:
这是我的作用域查找特定模型的方式:
class CreditResponse
self.table_name = "creditrsp"
has_one :transaction_code, :through => :credit_request
default_scope includes(:credit_request, :transaction_code)发布于 2015-05-06 05:34:38
您是否尝试修改rails代码以指定select语句?
blah.blah.select('/*+ FULL("CREDITRSP") */ "CREDITRSP"."ML_TRAN_ID" AS t0_r0, ...').blah.blahhttps://stackoverflow.com/questions/30062666
复制相似问题