рельсы 3 ... в этом случае два запроса два быстрее, чем один? - PullRequest
0 голосов
/ 06 февраля 2011

Мы будем делать это практически при каждом попадании на наш сайт. Размещено в Heroku под управлением Postgres.

Довольно распространенный сценарий ... один метод в нашей модели получает COUNT записей, соответствующих условию, а также LAST-запись, соответствующую тому же условию.

при использовании в реальном мире COUNT обычно будет меньше 20. Таблица содержит около 20 полей, ни одно из которых не превышает 200 символов.

в настоящее время я делаю ДВА запроса, n = widget.count (условия) , а затем делаю z = widget.last (условия)

но, конечно, я мог бы также сделать allfound = widget.find (условия) , затем получить n = allfound.count и z = allfound.last.

Что "лучше"? И каковы компромиссы? (Есть всегда компромиссы, верно?)

Ура! В JP

Ответы [ 2 ]

1 голос
/ 06 февраля 2011

Я бы придерживался двух запросов, потому что:

  • Не оптимизируйте преждевременно - пока вам НЕ НУЖНО оптимизировать это, придерживайтесь того, что вам нужно сделать, а не того, что является (или кажется) быстрым.
  • Если таблица не изменяется, ваша СУБД может кэшировать запросы / результаты в любом случае, поэтому запросы даже не коснутся диска (в любом случае).
  • Лучше кэшировать (например,в memcached) два отдельных значения, чтобы свести его к нулю запросов вместо кэширования всей таблицы в memcached.
  • Даже если один запрос был быстрее из-за времени обращения к базе данных, время, которое потребовалось бы Railsсоздание дополнительных записей (только для того, чтобы вы выбросили большинство из них), вероятно, компенсирует время на выполнение двух запросов.Тем не менее, с помощью двух запросов Rails придется подготовить оба из них, что также потребует времени.

Если вы действительно хотите узнать реальный ответ, единственный способ узнать наверняка - этосравните это.Создайте задание Rake, которое выполняет тест, и запустите его на Heroku.

0 голосов
/ 06 февраля 2011

Вы проверяли логи?Вы уверены, что Rails также не будет выполнять 2 запроса во втором случае?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...