sql >> Databasteknik >  >> RDS >> Oracle

Spelar ordningsföljden på tabellerna som hänvisas till i ON-klausulen i JOIN någon roll?

JOIN ordning kan framtvingas genom att placera tabellerna i rätt ordning i FROM klausul:

  1. MySQL har en speciell klausul som heter STRAIGHT_JOIN vilket gör att beställningen spelar roll.

    Detta kommer att använda ett index på b.id :

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

    Och detta kommer att använda ett index på a.StatusID :

    SELECT  a.Name, b.Status
    FROM    b
    STRAIGHT_JOIN
            a
    ON      b.ID = a.StatusID
    
  2. Oracle har en speciell ledtråd ORDERED för att genomdriva JOIN beställning:

    Detta kommer att använda ett index på b.id eller bygg en hashtabell på b :

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

    Och detta kommer att använda ett index på a.StatusID eller bygg en hashtabell på a :

    SELECT  /*+ ORDERED */
            *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    
  3. SQL Server har en ledtråd som heter FORCE ORDER att göra detsamma:

    Detta kommer att använda ett index på b.id eller bygg en hashtabell på b :

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

    Och detta kommer att använda ett index på a.StatusID eller bygg en hashtabell på a :

    SELECT  *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    OPTION (FORCE ORDER)
    
  4. PostgreSQL killar, förlåt. Din TODO-lista säger:

    Optimeringstips (önskas inte)

    Optimeringstips används för att komma runt problem i optimeraren. Vi vill hellre ha problemen rapporterade och åtgärdade.

När det gäller ordningen i jämförelsen spelar den ingen roll i någon RDBMS , AFAIK.

Även om jag personligen alltid försöker uppskatta vilken kolumn som kommer att sökas efter och placera den här kolumnen till vänster (för att det ska verka som ett lvalue ).

Se det här svaret för mer information.



  1. kan inte skapa tillägg utan superanvändarroll

  2. Reducerar parametern postgresql.conf, åt gången

  3. DATENAME() Exempel i SQL Server

  4. Oväntad Clustered Index Fragmentation