JOIN
ordem pode ser forçada colocando as tabelas na ordem correta no FROM
cláusula:-
MySQL tem uma cláusula especial chamadaSTRAIGHT_JOIN
o 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 especialORDERED
para impor oJOIN
pedido:
Isso usará um índice emb.id
ou construa uma tabela de hash emb
:
SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusID
E isso usará um índice ema.StatusID
ou construa uma tabela de hash ema
:
SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID
-
O SQL Server tem uma dica chamadaFORCE ORDER
para fazer o mesmo:
Isso usará um índice emb.id
ou 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.StatusID
ou 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.