ホームページ > データベース > mysql チュートリアル > Raw SQL は複雑な Rails クエリのパフォーマンスをどのように向上させることができますか?

Raw SQL は複雑な Rails クエリのパフォーマンスをどのように向上させることができますか?

Patricia Arquette
リリース: 2025-01-15 09:15:45
オリジナル
423 人が閲覧しました

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>
ログイン後にコピー

このコードは、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 のアクティブ レコード クエリ生成のオーバーヘッドが排除され、特に大規模なデータセットの場合、大幅なパフォーマンスの向上につながる可能性があります。 records_array は Ruby 配列と同様に扱うことができるため、アプリケーション ロジックにシームレスに統合できます。この手法は、タイムアウトになりやすい複雑なクエリを処理する場合に特に役立ちます。

以上がRaw SQL は複雑な Rails クエリのパフォーマンスをどのように向上させることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート