sql >> Database teknologi >  >> RDS >> Oracle

Sådan laver du skæring på en kompositionstabel

Med hensyn til ydeevne ser din forespørgsel OK ud. Har du målt det for at se, om der virkelig er et problem?

Hvis (object1_id, object2_id) er unik, så kan du skrive forespørgslen mere kortfattet som følger:

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

Bemærk, at 6 er antallet af angivne id'er. Dette bør ændres, hvis der angives et andet antal ID'er. Du skal måle den faktiske ydeevne på din dadta for at se, om dette giver nogen hastighedsforøgelse.

Hvis du ikke kan antage unikhed, så burde dette virke:

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

Det vigtigste er dog at sikre, at du har passende indekser på dit bord! Det er langt vigtigere end om du skriver den ene eller den anden forespørgsel.



  1. MySQL samtidige opdateringer

  2. MySQL Conditional SELECT i SELECT

  3. Hvordan indsætter jeg et mysql rumligt punkt med en yii-model?

  4. Opbygning af et træ ved hjælp af indlejrede uordnede lister