首頁 >資料庫 >mysql教程 >原始 SQL 如何增強複雜 Rails 查詢的效能?

原始 SQL 如何增強複雜 Rails 查詢的效能?

Patricia Arquette
Patricia Arquette原創
2025-01-15 09:15:45423瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn