Попробую сравнить два варианта:
Anei предложил хороший, красивый, легко масштабируемый запрос.
Но, в вопросе звучало так «Выбор по n условиям с AND»
допустим N = 10
тогда WHERE optionID IN (6,7,1,,,,23,,,)
HAVING cnt=10
Выглядит красиво, но не очень очевидно как оптимизатор сможет использовать индексы.
А групповая операция с хевингом очень медленная.
Поскольку речь видимо идет о расширенном поиске (которому не помогает кеширование) можно предположить что этот запрос будет чувствителен к быстродействию. И при определенных условиях вообще может класть сайт.
Таким образом я бы рассмотрел вариант который предложил tenbits (с иннер джойн)
для масштабирования там всего лишь надо добавлять еще один иннер джоин на каждый параметр.
Для оптимизации надо построить составной индекс optionID, productID (именно в таком порядке)
тогда каждый джоин будет делать выборку исключительно из индекса (не будет обращений к данным самой таблицы), причем крупноблочно по параметру.
в выборке продукты будут отсортированы по productID
т.е. заджоинить такие выборки очень просто.
Такой вариант более прогнозируемый в плане «плана запроса» при большом N
Но реальный результат будет ооочень сильно зависть от реальных данных. Надо экспериментировать.
Вполне возможно что разница не будет замечена вообще.