Maison > base de données > tutoriel mysql > Comment le SQL brut peut-il améliorer les performances des requêtes Rails complexes ?

Comment le SQL brut peut-il améliorer les performances des requêtes Rails complexes ?

Patricia Arquette
Libérer: 2025-01-15 09:15:45
original
423 Les gens l'ont consulté

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

Optimisation des requêtes Rails complexes avec Raw SQL

Le déploiement d'applications Rails, en particulier sur des plates-formes comme Heroku, peut parfois révéler des goulots d'étranglement en termes de performances résultant de requêtes de bases de données complexes. Cet article montre comment l'utilisation du SQL brut peut améliorer considérablement l'efficacité de ces requêtes.

Exploiter le SQL brut dans Rails

Rails fournit un mécanisme pour exécuter directement du SQL personnalisé. Cela contourne le générateur de requêtes ActiveRecord, ce qui entraîne souvent des temps d'exécution plus rapides. Voici le processus :

  1. Construisez votre requête SQL sous forme de chaîne.
  2. Utilisez ActiveRecord::Base.connection.execute pour exécuter la requête sur la base de données.
  3. Les résultats sont renvoyés sous forme de tableau, prêts à être traités dans votre code Ruby.

Exemple illustratif

Examinons un scénario impliquant des tables jointes et un classement :

<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>
Copier après la connexion

Ce code rejoint les tables PaymentDetail et PaymentError, en classant les résultats par horodatage created_at. Le SQL brut équivalent est :

<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>
Copier après la connexion

L'exécution est alors simple :

<code class="language-ruby">records_array = ActiveRecord::Base.connection.execute(sql)</code>
Copier après la connexion

Gains de performances

L'utilisation de SQL brut élimine la surcharge liée à la génération de requêtes Active Record de Rails, ce qui peut potentiellement conduire à des améliorations substantielles des performances, en particulier avec de grands ensembles de données. Le records_array peut être traité comme n'importe quel tableau Ruby, permettant une intégration transparente dans la logique de votre application. Cette technique est particulièrement utile lorsqu'il s'agit de requêtes complexes sujettes à des délais d'attente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal