Về mặt hiệu suất, truy vấn của bạn có vẻ ổn. Bạn đã đo lường nó để xem có thực sự có vấn đề không?
Nếu (object1_id, object2_id)
là duy nhất thì bạn có thể viết truy vấn ngắn gọn hơn như sau:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6
Lưu ý rằng 6
là số ID được cung cấp. Điều này sẽ được thay đổi nếu một số ID khác được cung cấp. Bạn sẽ phải đo hiệu suất thực tế trên dadta của mình để xem liệu điều này có làm tăng tốc độ hay không.
Nếu bạn không thể cho rằng tính duy nhất thì điều này sẽ hoạt động:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6
Tuy nhiên, điều quan trọng nhất là đảm bảo bạn có chỉ mục thích hợp trên bàn của bạn! Đây là xa quan trọng hơn việc bạn viết truy vấn này hay truy vấn khác.