По отношение на производителността вашата заявка изглежда добре. Измерихте ли го, за да видите дали наистина има проблем?
Ако (object1_id, object2_id)
е уникален, тогава можете да напишете заявката по-сбито, както следва:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6
Имайте предвид, че 6
е броят на предоставените идентификатори. Това трябва да се промени, ако е предоставен различен брой идентификатори. Ще трябва да измерите действителната производителност на вашия dadta, за да видите дали това води до някакво увеличение на скоростта.
Ако не можете да приемете уникалност, тогава това трябва да работи:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6
Най-важното обаче е да се уверите, че имате подходящи индекси на вашата маса! Това е далеч по-важно от това дали пишете една или друга заявка.