У меня есть приложение Rails (работающее под учетной записью Heroku), которое собирает статистику для домашней страницы о количестве записей, которые соответствуют определенным критериям.Каждый счет отображается как число на странице.Моя таблица (списки) состоит из около 22 500 записей.На производстве загрузка страницы занимает около 350 мс (все еще ниже порогового значения, но не очень хорошо для домашней страницы).
Пожалуйста, имейте в виду количество запросов, я хотел изобразить избыточность того, чтопытаюсь сделать.Это кажется , как будто это можно сделать гораздо эффективнее.Есть идеи?
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')
Один из вариантов, который я рассмотрел, - это использование хуков after_add и after_remove в моей модели листинга для обновления отдельной таблицы с этими статистическими данными.Единственное, что меня беспокоит, это связанные с этим вопросы технического обслуживания.Однако новые списки добавляются только несколько раз в течение дня, поэтому обновление указанной таблицы само по себе не должно вызывать проблем с производительностью.
Спасибо!