当我用大约25K记录填充数据库时,我注意到我的应用程序开始运行缓慢。我已经检查了日志并意识到,而不是一个SQL请求ActiveRecord执行的更多是八个。我已经重写了代码以使用一个SQL请求,并且它已经将我的应用程序加速了两次。
那么,在负载很重的应用程序部分中编写原始SQL请求是否正确?
答案 0 :(得分:1)
有时您需要eager load您的数据。其他时候你真的需要编写原始SQL查询
答案 1 :(得分:1)
使用原始SQL有时是正确的,因为ActiveRecord和Arel不容易使用完整的SQL语法,有时仅将范围表示为原始SQL片段是有帮助的,但它不正确对性能问题的第一个响应是使用原始SQL。
在使用原始SQL之前,最好先探索热切的加载和连接方法以及其他选项,因为您可能会使应用程序在将来不太灵活地进行更改。
如果发布导致问题的代码和由其生成的SQL,那么您可能会获得有关如何避免原始SQL的有用建议。