Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como fazer interseção em uma tabela de composição


Em termos de desempenho, sua consulta parece boa. Você já mediu para ver se realmente há um problema?

Se (object1_id, object2_id) for exclusivo, você poderá escrever a consulta de forma mais concisa da seguinte maneira:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6

Observe que o 6 é o número de IDs fornecidos. Isso deve ser alterado se um número diferente de IDs for fornecido. Você teria que medir o desempenho real em seus dados para ver se isso aumenta a velocidade.

Se você não pode assumir exclusividade, isso deve funcionar:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6

O mais importante, porém, é garantir que você tenha índices apropriados na sua mesa! Isto é longe mais importante do que escrever uma consulta ou outra.