sql >> Database >  >> RDS >> Oracle

Is de volgorde van tabellen waarnaar wordt verwezen in de ON-clausule van de JOIN van belang?

JOIN volgorde kan worden geforceerd door de tabellen in de juiste volgorde te plaatsen in de FROM clausule:

  1. MySQL heeft een speciale clausule genaamd STRAIGHT_JOIN waardoor de volgorde belangrijk is.

    Dit gebruikt een index op b.id :

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

    En dit zal een index gebruiken op a.StatusID :

    SELECT  a.Name, b.Status
    FROM    b
    STRAIGHT_JOIN
            a
    ON      b.ID = a.StatusID
    
  2. Oracle heeft een speciale hint ORDERED om de JOIN af te dwingen bestelling:

    Dit gebruikt een index op b.id of bouw een hashtabel op b :

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

    En dit zal een index gebruiken op a.StatusID of bouw een hashtabel op a :

    SELECT  /*+ ORDERED */
            *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    
  3. SQL Server heeft een hint genaamd FORCE ORDER om hetzelfde te doen:

    Dit gebruikt een index op b.id of bouw een hashtabel op b :

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

    En dit zal een index gebruiken op a.StatusID of bouw een hashtabel op a :

    SELECT  *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    OPTION (FORCE ORDER)
    
  4. PostgreSQL-jongens, sorry. Je TODO-lijst zegt:

    Optimizer-hints (niet gewenst)

    Optimizer-hints worden gebruikt om problemen in de optimizer te omzeilen. We zien liever dat de problemen worden gemeld en opgelost.

Wat betreft de volgorde in de vergelijking, het maakt niet uit in een RDBMS , AFAIK.

Hoewel ik persoonlijk altijd probeer in te schatten naar welke kolom zal worden gezocht en deze kolom aan de linkerkant te plaatsen (zodat het lijkt op een lvalue ).

Zie dit antwoord voor meer details.



  1. Maak een Auto-Increment-kolom in SQLite

  2. Hoe MySQL 8.0 te installeren op RHEL/CentOS 8/7 en Fedora 35

  3. Meerdere PDF-bestanden samenvoegen/combineren tot één PDF in Oracle met behulp van PLPDF_TOOLKIT PL/SQL-pakket

  4. Hoe u de huidige tijd in SQLite kunt krijgen