Du kan eliminera prestandaproblemen med gruppering och räkning om du lagrade den informationen någonstans. Du kan lägga till en kolumn i produkter som heter total_categories
som visar hur många kategorier produkten ingår i. Sedan kan du bara säga where total_categories = 4
. Detta kan vara svårare att upprätthålla om produkter ofta ändrar sina kategorier eftersom du hela tiden måste uppdatera det här fältet korrekt - och då måste du bestämma om du vill göra det i applikationskoden eller i en trigger eller i en lagrad procedur ...
Normalt sett skulle jag inte tycka att det är en bra idé att lagra sådan metadata direkt i en tabell, men om prestandan är verkligen så illa, det kan vara värt att överväga.