Comment puis-je convertir ce code en sql brut et l'utiliser dans rails ? Parce que lorsque je déploie ce code dans Heroku, il y a une erreur de timeout de la demande. Je pense que ce sera plus rapide si j'utilise raw sql.
@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)
3 votes
Pourquoi pensez-vous que le SQL brut sera plus rapide ? Comment savez-vous que c'est un problème de SQL ?
0 votes
Sans voir le plan de requête, je suppose que le problème que vous rencontrez est le classement par created_at. Vous êtes probablement en train de faire un seq scan sur l'ensemble de ces tables (en y ajoutant la table des projets). En faisant deux de ces requêtes en une seule fois avec la méthode du contrôleur sur une grande table et une base de données sous-puissante (les bases de données Heroku sont réglées de manière générique et relativement sous-puissantes pour les dollars que vous dépensez), vous risquez d'obtenir des délais d'attente. Si vous ne faites pas beaucoup d'insertions dans ces tables, vous pouvez utiliser un index trié : devcenter.heroku.com/articles/postgresql-index#sorted-index
1 votes
Il serait toujours plus rapide de couper le code SQL à la main (si vous savez ce que vous faites). Rails fait du sql vraiment méchant. Il fonctionne bien mais pour être général, il doit... être général. Ceci dit, Jim a probablement raison... créer une indexation serait mieux. Essayez d'exécuter votre requête dans pgadmin (contre votre base de données).