首页 > 数据库 > mysql教程 > 原始 SQL 如何增强复杂 Rails 查询的性能?

原始 SQL 如何增强复杂 Rails 查询的性能?

Patricia Arquette
发布: 2025-01-15 09:15:45
原创
424 人浏览过

How Can Raw SQL Enhance the Performance of Complex Rails Queries?

使用原始 SQL 优化复杂的 Rails 查询

部署 Rails 应用程序,尤其是在 Heroku 这样的平台上,有时会暴露出复杂数据库查询带来的性能瓶颈。 本文演示了如何使用原始 SQL 显着提高此类查询的效率。

在 Rails 中利用原始 SQL

Rails 提供了直接执行自定义 SQL 的机制。 这会绕过 ActiveRecord 查询构建器,通常会导致执行速度更快。 流程如下:

  1. 将 SQL 查询构造为字符串。
  2. 使用 ActiveRecord::Base.connection.execute 对数据库运行查询。
  3. 结果以数组形式返回,准备在 Ruby 代码中进行处理。

说明性示例

让我们检查一个涉及连接表和排序的场景:

<code class="language-ruby">@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)</code>
登录后复制

此代码连接 PaymentDetailPaymentError 表,按 created_at 时间戳对结果进行排序。 等效的原始 SQL 是:

<code class="language-sql">sql = "SELECT * FROM payment_details pd
       LEFT JOIN projects p ON pd.project_id = p.id
       UNION ALL
       SELECT * FROM payment_errors pe
       LEFT JOIN projects p ON pe.project_id = p.id
       ORDER BY created_at DESC"</code>
登录后复制

执行就很简单了:

<code class="language-ruby">records_array = ActiveRecord::Base.connection.execute(sql)</code>
登录后复制

性能提升

使用原始 SQL 消除了 Rails 的 Active Record 查询生成的开销,可能会带来显着的性能改进,尤其是对于大型数据集。 records_array 可以像任何 Ruby 数组一样对待,允许无缝集成到您的应用程序逻辑中。在处理容易超时的复杂查询时,这种技术特别有价值。

以上是原始 SQL 如何增强复杂 Rails 查询的性能?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板