@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
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
  • @TheRonCronix
    Вариантов оптимизации может быть несколько, в зависимости от версии СУБД, распределения данных. Например, можно сначала рассчитать свертку

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

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

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

Войти через TM ID
Похожие вопросы
Вакансии с Моего Круга
Заказы с Фрилансим