ruby-on-rails - rails 查询超时::错误:执行已过期

标签 ruby-on-rails ruby ruby-on-rails-3 postgresql rack

我有一个简单的查询,但它显示了Timeout::Error: execution expired,而且我正在使用 rack::timeout

SELECT  SUM(total_checks) as totalcheck FROM "orders"  WHERE 
(orders.order_status_id NOT IN (15, 17)) AND (orders.check_id = 36) AND 
(orders.pass_id = '49') AND (orders.created_at BETWEEN '2016-02-29 
22:00:00.000000' AND '2016-03-02 22:00:00.000000') LIMIT 1

此外,我的订单总数约为 9762797,此查询有任何问题吗?

什么时候搞定的解释分析

----------
Limit  (cost=153.76..153.77 rows=1 width=5) (actual time=14622.323..14622.324
rows=1 loops=1)
->  Aggregate  (cost=153.76..153.77 rows=1 width=5) (actual 
time=14622.322..14622.322 rows=1 loops=1)

 ->  Index Scan using idx_orders_check_and_pass on orders 
(cost=0.43..153.76 rows=1 width=5) (actual time=2739.717..14621.649 rows=141 
loops=1)
       Index Cond: ((check_id = 36) AND (pass_id = 49))
       Filter: ((order_status_id <> ALL ('{15,17}'::integer[])) AND 
(created_at >= '2016-02-29 22:00:00'::timestamp without time zone) AND 
(created_at <= '2016-03-02 22:00:00'::timestamp without time zone))
       Rows Removed by Filter: 42396
Total runtime: 14622.524 ms

(7 rows)

最佳答案

您有相当大的表来运行 SUM。我建议使用一些缓存机制来避免使用此查询,因为 14 秒很多。

例如,我建议创建新表 total_orders_checks 并在其中存储总支票。每次更新 orderstotal_checks 值时都需要更新它,它可能不适合您的应用程序设计,但您肯定会得到 total_checks 快得多。

关于ruby-on-rails - rails 查询超时::错误:执行已过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36006578/

相关文章:

ruby-on-rails - 使用 Rails 3.1 时如何在 Sass 中使用引用图像?

ruby-on-rails - 在 Rails 5.2 应用程序和 Golang 之间共享网络 session

ruby-on-rails - 使用 Rails 实现 facebook-OmniAuth

c - 为什么没有分配 RARRAY_LEN?

ruby - 在 Rails 3.2 中向 <ul> 添加一个类

ruby-on-rails - 我应该如何通过关联建立 has_one?

ruby-on-rails - 关于 ruby​​ on rails 的问答游戏

ruby-on-rails - Ruby rake loaderror - bundle exec rake 不工作

css - 打印 View 忽略样式表

ruby - 为什么有时需要安装minitest gem?