首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails添加ordered、index或full以加快查询速度

rails添加ordered、index或full以加快查询速度
EN

Stack Overflow用户
提问于 2015-05-06 04:28:30
回答 1查看 74关注 0票数 2

因此,我的rails代码生成了一个巨大的连接查询,该查询的开头如下:

代码语言:javascript
复制
SELECT "CREDITRSP"."ML_TRAN_ID"       AS t0_r0,
...
...
...

我注意到,当我在sql developer中运行此程序时,这需要大约5分钟。

尝试了以下备选方案,它们在3-10秒内返回结果:

代码语言:javascript
复制
 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中实现吗?

注意:我没有修改、更新、表模式迁移的控制权。此应用程序对这些表只有只读访问权限。

这是现有模型代码的一部分。

代码语言:javascript
复制
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。

编辑:

这是我的作用域查找特定模型的方式:

代码语言:javascript
复制
class CreditResponse 
  self.table_name = "creditrsp"
  has_one :transaction_code, :through => :credit_request


  default_scope includes(:credit_request, :transaction_code)
EN

回答 1

Stack Overflow用户

发布于 2015-05-06 05:34:38

您是否尝试修改rails代码以指定select语句?

代码语言:javascript
复制
blah.blah.select('/*+ FULL("CREDITRSP") */ "CREDITRSP"."ML_TRAN_ID" AS t0_r0, ...').blah.blah
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30062666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档