J'ai une application Rails (fonctionnant sur un compte Heroku) qui saisit un tas de statistiques pour la page d'accueil concernant le nombre d'enregistrements qui correspondent à certains critères. Chaque compte est affiché sous la forme d'un nombre sur la page. Ma table (listings) se compose d'environ 22 500 enregistrements. En production, il faut environ 350ms pour charger la page (toujours en dessous du seuil mais pas génial pour une page d'accueil).Est-il possible d'optimiser ces requêtes SQL plus loin?
Veuillez prendre en compte le nombre de requêtes ici, je voulais décrire la redondance de ce que j'essaie de faire. Ce sent comme cela pourrait être fait beaucoup plus efficacement. Des idées?
SELECT COUNT(1) FROM listings WHERE (city in ('Syracuse'))
SELECT COUNT(1) FROM listings WHERE (city in ('Syracuse')) AND (created_at >= '2011-01-30 18:28:44.656702')
SELECT COUNT(1) FROM listings WHERE (city in ('Cicero', 'Clay', 'Lysander', 'VanBuren', 'Salina'))
SELECT COUNT(1) FROM listings WHERE (city in ('Cicero', 'Clay', 'Lysander', 'VanBuren', 'Salina')) AND (created_at >= '2011-01-30 18:28:44.811090')
SELECT COUNT(1) FROM listings WHERE (city in ('DeWitt', 'Manlius', 'Pompey'))
SELECT COUNT(1) FROM listings WHERE (city in ('DeWitt', 'Manlius', 'Pompey')) AND (created_at >= '2011-01-30 18:28:44.954442')
SELECT COUNT(1) FROM listings WHERE (city in ('Onondaga', 'Elbridge', 'Geddes', 'Camillus'))
SELECT COUNT(1) FROM listings WHERE (city in ('Onondaga', 'Elbridge', 'Geddes', 'Camillus')) AND (created_at >= '2011-01-30 18:28:45.105438')
SELECT COUNT(1) FROM listings WHERE (city in ('Fabius', 'Lafayette', 'Marcellus', 'Otisco', 'Skaneateles', 'Spafford', 'Tully'))
SELECT COUNT(1) FROM listings WHERE (city in ('Fabius', 'Lafayette', 'Marcellus', 'Otisco', 'Skaneateles', 'Spafford', 'Tully')) AND (created_at >= '2011-01-30 18:28:45.258860')
SELECT COUNT(1) FROM listings WHERE (city in ('West Monroe', 'Hastings', 'Constantia', 'Palermo', 'Mexico', 'Parish', 'Schroeppel'))
SELECT COUNT(1) FROM listings WHERE (city in ('West Monroe', 'Hastings', 'Constantia', 'Palermo', 'Mexico', 'Parish', 'Schroeppel')) AND (created_at >= '2011-01-30 18:28:45.411138')
Une option que je considérais utilise les after_add et after_remove crochets sur mon modèle de cotation mettre à jour une table séparée avec ces statistiques. Ma seule préoccupation à ce sujet est les problèmes de maintenance impliqués. Cependant, les nouvelles listes ne sont ajoutées que quelques fois au cours de la journée, donc la mise à jour de cette table ne devrait pas causer de problèmes de performance en soi.
Merci!
Quel type de base de données est-il? – FrustratedWithFormsDesigner
Il utilise par défaut la base de données Postgres Heroku. J'utilise aussi le compte gratuit Heroku (peut-être le coupable?). – Mike