使用原始 SQL 最佳化複雜的 Rails 查詢
部署 Rails 應用程序,尤其是在 Heroku 這樣的平台上,有時會暴露出複雜資料庫查詢帶來的效能瓶頸。 本文示範如何使用原始 SQL 顯著提高此類查詢的效率。
在 Rails 中利用原始 SQL
Rails 提供了直接執行自訂 SQL 的機制。 這會繞過 ActiveRecord 查詢建構器,通常會導致執行速度更快。 流程如下:
ActiveRecord::Base.connection.execute
對資料庫執行查詢。 說明性範例
讓我們檢查一個涉及連接表和排序的場景:
<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>
此程式碼連接 PaymentDetail
和 PaymentError
表,依 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中文網其他相關文章!