@Loligan

Как облегчить запрос с множеством OR по поиску в одной таблице?

Запрос ниже выполняется крайне долго, как его ускорить не меняя структуру базы?
В данном скрипте ищутся все данные с параметрами, параметры вынесены в отдельной таблице, скажем param_id это параметр веса товара, param_id это к примеру кол-во носителей, ищутся все item_id в которых присутвую этим параметры
SELECT item_id FROM values_product WHERE
(value='X' AND param_id=2)
OR (value='Y' AND param_id=3)
OR (value='99' AND param_id=13)
OR (value='Z' AND param_id=12)
OR (value='741' AND param_id=11)
GROUP BY item_id HAVING count(*)=5
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
@slavabars
Веб программист
Это же набор условий, никак.
НО сделайте составной индекс для полей value и param_id и это ускорит ваш поиск
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
TheRonCronix
@TheRonCronix
Вариантов оптимизации может быть несколько, в зависимости от версии СУБД, распределения данных. Например, можно сначала рассчитать свертку

SELECT count(*), item_id, param_id, value
FROM values_product
GROUP BY item_id, param_id, value;

сохранив ее в отдельную таблицу. И если ее размер гораздо меньше, чем размер таблицы values_product, запрос к ней будет работать быстрее.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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