@sergik15828

Как упростить запрос mysql?

Подскажите как упростить/оптимизировать запрос
Смущает количество JOINов. Не будет ли это слишком ресурсоемкий запрос?
sqlfiddle.com/#!9/245ed3/246
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
@BorisKorobkov Куратор тега MySQL
Web developer
1.Твой запрос нормальный.
Теоретически можно
SELECT b.id, b.name, COUNT(*) AS cnt
FROM board as b
JOIN options as o1 ON o1.item_id = b.id AND
(
  (o1.option_id = 'model' AND o1.value IN ('Lanos','Transit','Rio'))
  OR
  (o1.option_id = 'color' AND o1.value IN ('Синий'))
  OR
  (o1.option_id = 'cond' AND o1.value IN ('Б/у'))
)
GROUP BY b.id, b.name
HAVING cnt = 3

, но не факт, что так будет лучше. Проверяй с помощью "explain" на реальных данных

2. Лучше innoDB, а не MyIsam

3. На больших нагрузках твоя БД сдохнет.
3.1. Нужен индекс по options.option_id и options.value (отдельные или составной или составной вместе с item_id). Опять же: проверяй разные варианты с помощью explain на реальных данных
3.2. options.option_id и options.value нужно делать числами, вынося текстовые значения в отдельные таблицы-справочники
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@NickPush
на мой взгляд с запросом все в порядке. не надо бояться джойнов. гораздо хуже когда

select * from XXX where id in (select id from YYY .... )
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы