Consulta SQL para encontrar productos que coincidan con un conjunto de categorías.

Tengo 3 tablas: productos, categorías y pro_cat_link. Un producto se puede vincular a una o varias categorías a través de la tabla pro_cat_link.

Mi consulta debe responder al siguiente problema: encuentre todos los productos que coincidan con un conjunto de categorías. Ej: encontrar todos los productos que sean "amarillos Y frutales Y dulces".

Al investigar este problema en SO, solo pude encontrar la solución que estoy usando actualmente:Consulta SQL complicada: búsqueda de elementos que coincidan con varias claves externas diferentes

En mi caso, mi consulta se ve así:

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

En otras palabras, seleccione todos los productos que coincidan con una de las identificaciones de categoría (3,6,8,10) y mantenga solo aquellos que tengan exactamente 4 categorías coincidentes.

Esto funciona bien, pero tengo problemas de rendimiento ya que COUNT (), GROUP BY, ORDER BY hace que la indexación adecuada sea muy limitada. ¿Alguien puede pensar en una mejor manera de resolver ese problema?

Respuestas a la pregunta(2)

Su respuesta a la pregunta