JOIN ordem pode ser forçada colocando as tabelas na ordem correta no FROM cláusula:-
MySQL tem uma cláusula especial chamadaSTRAIGHT_JOINo que torna a ordem importante.
Isso usará um índice emb.id:
SELECT a.Name, b.Status FROM a STRAIGHT_JOIN b ON b.ID = a.StatusID
E isso usará um índice ema.StatusID:
SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID -
Oracle tem uma dica especialORDEREDpara impor oJOINpedido:
Isso usará um índice emb.idou construa uma tabela de hash emb:
SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusID
E isso usará um índice ema.StatusIDou construa uma tabela de hash ema:
SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID -
O SQL Server tem uma dica chamadaFORCE ORDERpara fazer o mesmo:
Isso usará um índice emb.idou construa uma tabela de hash emb:
SELECT * FROM a JOIN b ON b.ID = a.StatusID OPTION (FORCE ORDER)
E isso usará um índice ema.StatusIDou construa uma tabela de hash ema:
SELECT * FROM b JOIN a ON b.ID = a.StatusID OPTION (FORCE ORDER) -
Pessoal do PostgreSQL, desculpe. Sua lista de tarefas diz:
Dicas do otimizador (não desejadas)
As dicas do otimizador são usadas para solucionar problemas no otimizador. Preferimos que os problemas sejam relatados e corrigidos.
Quanto à ordem na comparação, não importa em nenhum
RDBMS , ATÉ ONDE SEI. Embora eu pessoalmente sempre tente estimar qual coluna será pesquisada e coloco essa coluna à esquerda (para parecer um
lvalue ). Veja esta resposta para mais detalhes.