【发布时间】:2013-01-27 06:45:18
【问题描述】:
如何将此代码转换为原始 sql 并在 rails 中使用?因为当我在heroku中部署这段代码时,会出现请求超时错误。我认为如果我使用原始sql会更快。
@payments = PaymentDetail.joins(:project).order('payment_details.created_at desc')
@payment_errors = PaymentError.joins(:project).order('payment_errors.created_at desc')
@all_payments = (@payments + @payment_errors)
【问题讨论】:
-
为什么你认为原始 SQL 会更快?你怎么知道是 SQL 问题?
-
没有看到查询计划,我猜你遇到的问题是按 created_at 排序的。您可能正在对整个表进行 seq 扫描(哦,还引入了项目表)。在一个大表和动力不足的数据库上使用一次控制器方法执行其中两个(heroku 数据库进行了通用调整,并且相对于您花费的 $$ 而言动力相对不足),您可能会遇到超时。如果您没有在这些表中进行大量插入操作,则可以进行排序索引:devcenter.heroku.com/articles/postgresql-indexes#sorted-indexes
-
好吧,手动剪切 sql 总是会更快(如果您知道自己在做什么)。 Rails 生成了一些非常讨厌的 sql。它运作良好,但要通用,它必须...通用。也就是说,Jim 可能是对的……创建索引会更好。尝试在 pgadmin 中运行您的查询(针对您的数据库)
标签: sql ruby-on-rails