Задать вопрос

Изменится ли скорость выполнения MySQL-запроса?

SELECT min(price) as min, max(price) as max FROM s_variants AS v WHERE 1 AND product_id in('124','125','126','127','128','129','136','138','314','315','316','317','318','319','320','321','322','323','324','325')

Перечисленные product_id это ID товаров.
Представьте если будет 1000 товаров?

Повлияет ли это как-нибудь на запрос? Время исполнения и т.д.
  • Вопрос задан
  • 2535 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 2
Возьмите да протестируйте и посмотрите планы запросов.
EXPLAIN
dev.mysql.com/doc/refman/5.7/en/optimization.html
Ответ написан
Комментировать
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Насколько я помню, запрос имеет ограничение на размер пакета (это к вопросы длины запроса), кажется в 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')
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@pihel
Sql, Oracle, pl/sql, BI, ETL, php, olap
Думаю повлияет на время парсинга запроса.
Может сделать временную таблицу с одной колонкой под эти ID и джойнить ее с основной?
Ответ написан
Комментировать
Вам срочно сюда: A Visual Explanation of SQL Joins
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы