Rails 4原始SQL Server查询 - 使用.execute仍然非常慢

时间:2016-05-18 02:20:26

标签: ruby-on-rails sql-server performance optimization

我有一个Rails 4应用程序,它执行许多不同的SQL Server查询。大多数返回少于1,000行,并且页面在浏览器中加载很快。那里没有问题。

但是,我有一个返回56,000行的怪物查询。它必须返回所有56k,没有问题。当然它可以使用分页,但这不会解决页面加载速度慢的问题。

请注意,这是我们内部使用的远程SQL服务器。

到目前为止我尝试过:

在模型中定义的方法定义中使用find_by_sql,然后在控制器中调用它。即,

@query = Client.closed_trouble_tickets

然后在视图中迭代@query。这适用于< 1,000行查询。当我尝试56k行的方法时,页面可能需要将近两分钟才能加载。不能接受的。

我为这56k的尝试过:

@records = []

Client.connection.select_all(Client.send(:sanitize_sql_array, 
["SQL QUERY HERE FOR 56,000 ROWS"])).each do |record|

    @records << { a_name: record["OneColumn"], b_name: record["TwoColumn"] ... }

end

这有点快,但仍然是可接受的页面加载时间(可能是60秒而不是90+)。当我在SQL Server Management Studio中运行56k查询时,它是即时的。

我也尝试使用这种性质的设置,但页面加载速度与上面类似:

def self.execute_statement(sql)
    results = Client.connection.execute(sql)
    if results.present?
        return results
    else
        return nil
    end
end

我该怎么做才能加快速度?

0 个答案:

没有答案