sql >> Base de Datos >  >> RDS >> Mysql

Left JOIN más rápido o Inner Join más rápido?

Depende; ejecútelos a ambos para averiguarlo; luego ejecute 'explicar selección' para obtener una explicación.

La diferencia de rendimiento real puede oscilar entre "prácticamente inexistente" y "bastante significativa", dependiendo de cuántas filas en A con id='12345' no tengan registros coincidentes en B y C.

Actualizar (basado en planes de consulta publicados)

Cuando usa INNER JOIN, no importa (en términos de resultados, no de rendimiento) con qué tabla comenzar, por lo que el optimizador intenta elegir la que cree que funcionaría mejor. Parece que tiene índices en todas las columnas PK / FK apropiadas y no tiene un índice en friend_events.userid o hay demasiados registros con userid = '13006' y no se está utilizando; de cualquier manera, el optimizador elige la tabla con menos filas como "base"; en este caso, es zcms_users .

Cuando usa LEFT JOIN importa (resultados sabios) con qué tabla comenzar; así friend_events es escogido Ahora por qué lleva menos tiempo de esa manera no estoy muy seguro; Supongo que friend_events.userid condición ayuda. Si agregara un índice (¿es realmente varchar, por cierto? ¿No es numérico?) en eso, su INNER JOIN también podría comportarse de manera diferente (y volverse más rápido).