В Rails 3 с mysql предположим, что у меня есть две модели, клиенты и покупки, очевидно, покупают own_to клиент. Я хочу найти всех клиентов с 2 заказами и более. Я могу просто сказать:
Customer.includes(:purchases).all.select{|c| c.purchases.count > 2}
Эффективно, однако, строка выше делает запрос о величине Customer.all и Purchase.all, затем обрабатывает тип "select" в ruby. В большой базе данных я бы предпочел избегать выполнения всего этого "выбора" расчета в рубине, а mysql выполнить обработку и предоставить только список квалифицированных клиентов. Это намного быстрее (поскольку mysql более настроен для этого) и значительно снижает пропускную способность из базы данных.
К сожалению, я не могу вызвать код со строительными блоками в rails (где, имея, группу и т.д.), чтобы это произошло, что-то в строках (psudo-code):
Customer.joins(:purchases).where("count(purchases) > 2").all
Я соглашусь на прямое решение MySql, хотя я предпочитаю это разбираться в элегантной структуре рельсов.