Consulta SQL para encontrar produtos que correspondam a um conjunto de categorias

Eu tenho 3 tabelas: produtos, categorias e pro_cat_link. Um produto pode ser vinculado a uma ou mais categorias por meio da tabela pro_cat_link.

Minha consulta deve responder ao seguinte problema: encontre todos os produtos que correspondem a um conjunto de categorias. Ex: encontre todos os produtos que são "amarelo E fruta E doce".

Ao pesquisar esse problema no SO, encontrei apenas a solução que estou usando atualmente:Consulta SQL complicada - encontrar itens correspondentes a várias chaves estrangeiras diferentes

No meu caso, minha consulta é assim:

SELECT products.id, COUNT(DISTINCT categories.id) as countCat
FROM products
INNER JOIN pro_cat_link ON (pro_cat_link.product_id = products.id)
WHERE pro_cat_link.category_id IN (3,6,8,10)
GROUP BY product.id
ORDER BY product.date DESC
HAVING countCat = 4

Em outras palavras, selecione todos os produtos que correspondem a um dos IDs de categoria (3,6,8,10) e mantenha apenas aqueles que têm exatamente 4 categorias correspondentes.

Isso funciona bem, mas estou tendo problemas de desempenho, pois o COUNT (), GROUP BY, ORDER BY torna a indexação adequada muito limitada. Alguém pode pensar em uma maneira melhor de resolver esse problema?

questionAnswers(2)

yourAnswerToTheQuestion