SQL Query Optimization Предлагаемые продукты

Сейчас я попытаюсь лучше объяснить, какова цель следующего вопроса и запроса. Предположим, мы говорим о среде электронной коммерции и базе данных. У нас есть, помимо прочего, три таблицы: products, orders и orders_data. Таблица ORDERS будет обрабатывать все размещенные заказы, а дополнительная таблица, которую мы назовем ORDERS_DATA, будет хранить все продукты, записанные в заказе.

После определения таблиц, без этих ненужных полей для моего вопроса:

    ORDERS (*id*, date, totale, ...);
    ORDERS_DATA (id_order, id_product, ...);
    PRODUCTS (id, name, ...);

Первичный ключ вЗАКАЗЫ являетсяЯ быв то время как в ORDERS_DATA ключ(id_order, id_product).

Что я хотел бы сделать с запросом, чтобы получить, учитываяИДАНТИФИКАЦИОННЫЙ НОМЕР ПРОДУКТА (во время серфинга на странице товара или на странице корзины), предлагаемые товары на основе таблицы ORDERS_DATA. Запрос вернет весь id_product, который живет в тех заказах, где хотя бы один из этих продуктов является заданнымИДАНТИФИКАЦИОННЫЙ НОМЕР ПРОДУКТА

Ради простоты приведу пример. Давайте предположим, что у нас есть эти строки в ORDERS_DATA:

R1(1, 1); R2(1, 2); R3(1, 3); R4(2, 2), R5(2, 5); R6(3, 3);

Я хочу предложения для идентификатора продукта = 2. Мой запрос вернет идентификаторы: 1 и 3 (от R1 и R3 - у них одинаковый идентификатор заказа, и у этого заказа есть также продукт 2 - от R2 - между его продуктами) и продукт 5 благодаря заказ № 2. Заказ № 3 будет проигнорирован.

Это запрос, который я написал, но я уверен, что он не самый лучший по производительности и стилю.

SELECT 
    A.id_product, COUNT( A.id_product ) AS num
FROM  
    orders_data A, orders_data B
WHERE 
    A.id_order = B.id_order
    AND B.id_product IN  (*IDs-HERE*)
    AND A.id_product NOT IN (*IDs-HERE*)
GROUP BY A.id_product

Я уже использовал синтаксис INNER JOIN, но ничего не изменилось в производительности. Запрос занимает 0,0022сек с одним идентификатором продукта в разделе IN. Производительность будет снижаться экспоненциально с несколькими идентификаторами товаров (например, на странице корзины, с большим количеством товаров в корзине).

Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос