私は非常に大きなデータベースを持っており、この 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])
ご覧のとおり、検索では最初の条件が実行され、次に他の where 条件でフィルター処理されるため、400,000 個の製品が検索されます。それはパフォーマンスを犠牲にしないでしょうか、それとも私は完全に(私が望む)間違っていますか?
注: Railscast でもこの質問を書いたことがありますが、古い Railscasts であるため、その質問が誰かに表示されるかどうかはわかりません。せっかくなのでここにも書きました。