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

L'ordine delle tabelle a cui si fa riferimento nella clausola ON del JOIN è importante?

JOIN l'ordine può essere forzato mettendo le tabelle nel giusto ordine nel FROM clausola:

  1. MySQL ha una clausola speciale chiamata STRAIGHT_JOIN il che rende l'ordine importante.

    Questo utilizzerà un indice su b.id :

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

    E questo utilizzerà un indice su a.StatusID :

    SELECT  a.Name, b.Status
    FROM    b
    STRAIGHT_JOIN
            a
    ON      b.ID = a.StatusID
    
  2. Oracle ha un suggerimento speciale ORDERED per imporre il JOIN ordine:

    Questo utilizzerà un indice su b.id oppure crea una tabella hash su b :

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

    E questo utilizzerà un indice su a.StatusID oppure crea una tabella hash su a :

    SELECT  /*+ ORDERED */
            *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    
  3. SQL Server ha un suggerimento chiamato FORCE ORDER per fare lo stesso:

    Questo utilizzerà un indice su b.id oppure crea una tabella hash su b :

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

    E questo utilizzerà un indice su a.StatusID oppure crea una tabella hash su a :

    SELECT  *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    OPTION (FORCE ORDER)
    
  4. Ragazzi di PostgreSQL, mi dispiace. Il tuo elenco delle cose da fare dice:

    Suggerimenti per l'ottimizzazione (non desiderati)

    I suggerimenti per l'ottimizzatore vengono utilizzati per aggirare i problemi nell'ottimizzatore. Preferiamo che i problemi vengano segnalati e risolti.

Per quanto riguarda l'ordine nel confronto, non importa in nessun RDBMS , AFAIK.

Anche se personalmente cerco sempre di stimare quale colonna verrà cercata e metto questa colonna a sinistra (per farla sembrare un lvalue ).

Vedi questa risposta per maggiori dettagli.