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_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
-
Oracle a un indice spécial
ORDERED
pour appliquer leJOIN
commande :Cela utilisera un index sur
b.id
ou construire une table de hachage surb
: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 sura
:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID
-
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 surb
: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 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.