Насколько я помню, запрос имеет ограничение на размер пакета (это к вопросы длины запроса), кажется в 4кб по умолчанию. Определяется в переменной max_allowed_packet в my.cnf.
Если есть индекс по price и product_id является ключем или уникальным индексом, то даже 10000 товаров особой нагрузки не создадут. Так как выборка идет по ключу с созданием таблицы запроса в памяти, далее поиск min/max по имеющейся выборке. Только вот зачем там
"WHERE 1 AND"? И что-то кажется, что запрос в таком виде выполнен не будет, определена переменная
v, которая не используется.
Да, по поводу product_id - лучше его сделать числом, а не строкой! Хотя бы через промежуточную таблицу.
Кажется нужно так:
SELECT min(v.price) as min, max(v.price) as max FROM s_variants AS v WHERE v.product_id in('124','125','126','127','128','129','136','138','314','315','316','317','318','319','320','321','322','323','324','325')