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

Betyder rækkefølgen af ​​tabeller, der henvises til i ON-klausulen i JOIN?

JOIN rækkefølgen kan forceres ved at placere tabellerne i den rigtige rækkefølge i FROM klausul:

  1. MySQL har en speciel klausul kaldet STRAIGHT_JOIN hvilket gør, at rækkefølgen har betydning.

    Dette vil bruge et indeks på b.id :

    SELECT  a.Name, b.Status
    FROM    a
    STRAIGHT_JOIN
            b
    ON      b.ID = a.StatusID
    

    Og dette vil bruge et indeks på a.StatusID :

    SELECT  a.Name, b.Status
    FROM    b
    STRAIGHT_JOIN
            a
    ON      b.ID = a.StatusID
    
  2. Oracle har et særligt tip ORDERED for at håndhæve JOIN ordre:

    Dette vil bruge et indeks på b.id eller byg en hash-tabel på b :

    SELECT  /*+ ORDERED */
            *
    FROM    a
    JOIN    b
    ON      b.ID = a.StatusID
    

    Og dette vil bruge et indeks på a.StatusID eller byg en hash-tabel på a :

    SELECT  /*+ ORDERED */
            *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    
  3. SQL Server har et tip kaldet FORCE ORDER at gøre det samme:

    Dette vil bruge et indeks på b.id eller byg en hash-tabel på b :

    SELECT  *
    FROM    a
    JOIN    b
    ON      b.ID = a.StatusID
    OPTION (FORCE ORDER)
    

    Og dette vil bruge et indeks på a.StatusID eller byg en hash-tabel på a :

    SELECT  *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    OPTION (FORCE ORDER)
    
  4. PostgreSQL gutter, undskyld. Din TODO-liste siger:

    Optimeringstip (ønskes ikke)

    Optimeringstip bruges til at løse problemer i optimeringsværktøjet. Vi vil hellere have problemerne rapporteret og rettet.

Hvad angår rækkefølgen i sammenligningen, er den ligegyldig i nogen RDBMS , AFAIK.

Selvom jeg personligt altid prøver at estimere, hvilken kolonne der søges efter, og sætter denne kolonne til venstre (for at den skal virke som en lvalue ).

Se dette svar for flere detaljer.



  1. Ordner 'Vælg' altid efter primærnøgle?

  2. Skifter kolonneværdier i MySQL

  3. Oracle DB citat kolonnenavne

  4. Standard numeriske formatstrenge understøttet af FORMAT() i SQL Server