Oracle
 sql >> Base de données >  >> RDS >> Oracle

L'ordre des tables référencées dans la clause ON du JOIN est-il important ?

JOIN l'ordre peut être forcé en mettant les tables dans le bon ordre dans le FROM clause :

  1. MySQL a une clause spéciale appelée STRAIGHT_JOIN ce qui rend la commande importante.

    Cela utilisera un index sur b.id :

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

    Et cela utilisera un index sur a.StatusID :

    SELECT  a.Name, b.Status
    FROM    b
    STRAIGHT_JOIN
            a
    ON      b.ID = a.StatusID
    
  2. Oracle a un indice spécial ORDERED pour appliquer le JOIN commande :

    Cela utilisera un index sur b.id ou construire une table de hachage sur b :

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

    Et cela utilisera un index sur a.StatusID ou construire une table de hachage sur a :

    SELECT  /*+ ORDERED */
            *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    
  3. SQL Server a un indice appelé FORCE ORDER faire de même :

    Cela utilisera un index sur b.id ou construire une table de hachage sur b :

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

    Et cela utilisera un index sur a.StatusID ou construire une table de hachage sur a :

    SELECT  *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    OPTION (FORCE ORDER)
    
  4. Les gars de PostgreSQL, désolé. Votre liste de choses à faire dit :

    Conseils d'optimisation (non souhaités)

    Les conseils de l'optimiseur sont utilisés pour contourner les problèmes dans l'optimiseur. Nous préférerions que les problèmes soient signalés et résolus.

Quant à l'ordre dans la comparaison, il n'a d'importance dans aucun RDBMS , autant que je sache.

Bien que j'essaie toujours personnellement d'estimer quelle colonne sera recherchée et de mettre cette colonne à gauche (pour qu'elle ressemble à une lvalue ).

Voir cette réponse pour plus de détails.