У меня очень большая база данных, и я использую форму расширенного поиска, похожую на этот railscast: http://railscasts.com/episodes/111-advanced-search-form-revised
Возможно, это глупый вопрос, но представьте, что у вас есть 400 000 товаров (или больше), которые вы фильтруете с помощью этой цепочки .where
(и разбивки на страницы).
products = Product.order(:name)
products = products.where("name like ?", "%#{keywords}%") if keywords.present?
products = products.where(category_id: category_id) if category_id.present?
products = products.where("price >= ?", min_price) if min_price.present?
products = products.where("price <= ?", max_price) if max_price.present?
products.page(params[:page])
Насколько я понимаю, поиск выполняет первое условие, а затем фильтрует другое, где условия, так что у вас будет 400 000 найденных товаров. Разве это не убило бы производительность, или я полностью (как хотелось бы) неправ?
Примечание. Я также написал, что задал этот вопрос на railscast, но, поскольку я уже старый, я не знаю, увидит ли кто-нибудь там этот вопрос. По этой причине я тоже написал здесь.