【发布时间】:2011-06-18 18:54:51
【问题描述】:
我有一个 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 挂钩来使用这些统计信息更新单独的表。我唯一关心的是涉及的维护问题。但是,新列表只会在一天中添加几次,因此更新所述表本身不会导致性能问题。
谢谢!
【问题讨论】:
-
它默认使用 Heroku 提供的 Postgres 数据库。我也在使用免费的 Heroku 帐户(可能是罪魁祸首?)。
标签: sql ruby-on-rails ruby optimization