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

Как оптимизировать запрос к MySQL при выборке из многих таблиц?

У меня существуют таблицы - прайсы поставщиков (сейчас меньше 10, будут десятки) - названы именем постащика (айди, айди товара, описание, цена, дата обновления) - в каждом несколько тысяч товаров и товары (айди товара, название).
Существует запрос, при помощи которого я получаю таблицу с товарами, которые имеются в наличии и имя поставщика, у которого данный товар самый дешевый:
товар | поставщик | описание товара у данного поставщика | цена

SELECT * FROM (SELECT * FROM (

для первого поставщика
SELECT article_id, "поставщик х" AS supplier, description, price FROM `поставщик х`, `articles` WHERE (`поставщик х`.`article_id` = `articles`.`id` AND DATE = (SELECT MAX( DATE ) FROM `поставщик х`) AND price IS NOT NULL)

для каждого последующего поставщика
UNION ALL SELECT article_id, "поставщик х+1" AS supplier, description, price FROM `shop`.`поставщик х+1`, `articles` WHERE (`поставщик х+1`.`article_id` = `articles`.`id` AND DATE = ( SELECT MAX( DATE ) FROM `поставщик х+1` ) AND price IS NOT NULL)

затем
) a ORDER BY article_id, price ASC ) b GROUP BY article_id';

В связи с тем, что количество поставщиков будет возрастать, как и товаров, которых нет в настоящее время, мне необходимо оптимизировать этот запрос.
Насколько я понимаю, первое, что необходимо сделать, - это создать таблицы, в которых будут актуальные прайсы поставщиков (чтобы не выбирать максимальную дату) и работать с ними.
Второй шаг, который я вижу - создать итоговую таблицу, а при изменении прайса у конкретного поставщика, менять в ней только те строки, в которых есть товары, которые имеются у данного поставщика.

Правильного ли я мыслю? Как еще можно оптимизировать запрос?
  • Вопрос задан
  • 247 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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