Potresti eliminare i problemi di prestazioni del raggruppamento e del conteggio se avessi archiviato tali informazioni da qualche parte. Puoi aggiungere una colonna a Prodotti chiamata total_categories
questo ti dirà a quante categorie partecipa il prodotto. Quindi potresti semplicemente dire where total_categories = 4
. Questo potrebbe essere più difficile da mantenere se i prodotti cambiano spesso le loro categorie perché dovresti aggiornare costantemente questo campo correttamente e quindi devi decidere se vuoi farlo nel codice dell'applicazione o in un trigger o in una procedura memorizzata ...
Normalmente non credo sia una buona idea archiviare tali metadati direttamente in una tabella, ma se le prestazioni sono veramente così male, potrebbe valere la pena considerare.