Бихте могли да премахнете проблемите с производителността на групирането и преброяването, ако съхраните тази информация някъде. Можете да добавите колона към Продукти, наречена total_categories
това ще ви каже в колко категории участва продуктът. Тогава можете просто да кажете where total_categories = 4
. Това може да е по-трудно за поддържане, ако продуктите често променят категориите си, защото ще трябва постоянно да актуализирате това поле правилно - и след това трябва да решите дали искате да направите това в код на приложение или в тригер, или в съхранена процедура ...
Обикновено не смятам, че е много добра идея да съхранявате такива метаданни директно в таблица, но ако ефективността е наистина толкова лошо, може би си струва да го обмислим.