Otimização de Consultas SQL Produtos Sugeridos

Vou tentar agora explicar melhor qual é o propósito da seguinte questão e consulta. Vamos supor que estamos falando de um ambiente de comércio eletrônico e banco de dados. Temos, entre muitos outros, três tabelas: produtos, pedidos e ordens_dados. A tabela ORDERS cuidará de todos os pedidos feitos e de uma sub-tabela, que chamaremos de ORDERS_DATA e armazenará todos os produtos registrados em um pedido.

Seguindo a definição das tabelas, sem esses campos inúteis para minha pergunta:

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

A chave primária emORDENS éidentidade, enquanto em ORDERS_DATA a chave é(id_order, id_product).

O que eu gostaria de fazer com uma consulta é retratar, dado umID DO PRODUTO (enquanto navega em uma página de produto ou página do carrinho também), produtos sugeridos baseados na tabela ORDERS_DATA. A consulta retornará todo id_product que mora naqueles pedidos, onde, pelo menos um desses produtos é o dadoID DO PRODUTO

Por uma questão de semplicidade, vou relatar um exemplo. Vamos supor que temos esses ROWs em ORDERS_DATA:

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

Quero sugestões para o ID do produto = 2. Minha consulta retornará os IDs: 1 e 3 (de R1 e R3 - eles compartilham o mesmo código de pedido e este pedido também tem o produto 2 - de R2 - entre seus produtos) e produto 5 graças a o número do pedido 2. O número do pedido 3 será ignorado.

Esta é a consulta que escrevi, mas tenho certeza de que não é a melhor em performance e estilo.

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

Eu já usei a sintaxe INNER JOIN, mas nada mudou no desempenho. A consulta leva 0,0022sec com apenas um ID de produto no IN clausole. O desempenho irá decrescer exponencialmente com vários id de produtos (por exemplo, durante a página do carrinho, com mais produtos no cesto).

Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion