sql >> Database >  >> RDS >> Oracle

Hoe intersectie op een compositietabel te doen

Qua prestaties ziet je query er goed uit. Heb je het gemeten om te zien of er echt een probleem is?

Als (object1_id, object2_id) uniek is, kunt u de zoekopdracht als volgt beknopter schrijven:

SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6

Merk op dat de 6 is het aantal verstrekte ID's. Dit moet worden gewijzigd als een ander aantal ID's wordt verstrekt. Je zou de werkelijke prestaties op je dadta moeten meten om te zien of dit een snelheidsverhoging geeft.

Als je geen uniciteit kunt aannemen, zou dit moeten werken:

SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6

Het belangrijkste is echter om ervoor te zorgen dat je de juiste indexen hebt op je tafel! Dit is ver belangrijker dan of je de ene of de andere vraag schrijft.



  1. Hoe voeg ik een verzoek time-out toe in Typeorm/Typescript?

  2. Effectieve strategie voor het achterlaten van een audittrail/wijzigingsgeschiedenis voor DB-applicaties?

  3. Fout:TCP-provider:foutcode 0x2746. Tijdens de Sql-installatie in linux via terminal

  4. Hoe "X Rows Selected" in SQLcl &SQL*Plus (Oracle) te verwijderen