Z hlediska výkonu vypadá váš dotaz OK. Změřili jste to, abyste zjistili, zda skutečně existuje problém?
Pokud (object1_id, object2_id)
je jedinečný, pak můžete dotaz napsat stručněji následovně:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6
Všimněte si, že 6
je počet poskytnutých ID. Toto by se mělo změnit, pokud je poskytnut jiný počet ID. Museli byste změřit skutečný výkon na svém datovém počítači, abyste zjistili, zda to zvyšuje rychlost.
Pokud nemůžete předpokládat jedinečnost, mělo by to fungovat:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6
Nejdůležitější je však ujistit se, že máte vhodné indexy na vašem stole! To je daleko důležitější než to, zda napíšete jeden nebo druhý dotaz.