Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Left JOIN mais rápido ou Inner Join mais rápido?


Depende; execute os dois para descobrir; em seguida, execute um 'explain select' para obter uma explicação.

A diferença de desempenho real pode variar de "praticamente inexistente" a "bastante significativa", dependendo de quantas linhas em A com id='12345' não têm registros correspondentes em B e C.

Atualizar (com base em planos de consulta postados)

Quando você usa INNER JOIN, não importa (em termos de resultados, não em termos de desempenho) com qual tabela começar, então o otimizador tenta escolher aquela que acha que teria melhor desempenho. Parece que você tem índices em todas as colunas PK / FK apropriadas e você não tem um índice em friend_events.userid ou há muitos registros com userid = '13006' e não está sendo usado; de qualquer forma, o otimizador escolhe a tabela com menos linhas como "base" - neste caso, é zcms_users .

Quando você usa LEFT JOIN, faz importa (em termos de resultados) com qual tabela começar; assim friend_events é escolhido. Agora por que leva menos tempo dessa forma, não tenho certeza; Acho que friend_events.userid condição ajuda. Se você adicionar um índice (é realmente varchar, btw? não numérico?) sobre isso, seu INNER JOIN pode se comportar de maneira diferente (e se tornar mais rápido) também.