JOIN l'ordre peut être forcé en mettant les tables dans le bon ordre dans le FROM clause :
-
MySQL a une clause spéciale appelée
STRAIGHT_JOINce 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.StatusIDEt cela utilisera un index sur
a.StatusID:SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID -
Oracle a un indice spécial
ORDEREDpour appliquer leJOINcommande :Cela utilisera un index sur
b.idou construire une table de hachage surb:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusIDEt cela utilisera un index sur
a.StatusIDou construire une table de hachage sura:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID -
SQL Server a un indice appelé
FORCE ORDERfaire de même :Cela utilisera un index sur
b.idou construire une table de hachage surb:SELECT * FROM a JOIN b ON b.ID = a.StatusID OPTION (FORCE ORDER)Et cela utilisera un index sur
a.StatusIDou construire une table de hachage sura:SELECT * FROM b JOIN a ON b.ID = a.StatusID OPTION (FORCE ORDER) -
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.