2011-01-30 20 views
9

Tengo una discusión con un colega mío, y estamos atascados en el hecho de si una unión interna es más rápida que una unión natural simplemente debido al hecho de que la cláusula ON se especifica en una unión interna, y por lo tanto, el motor SQL no necesita comparar estructuras de tabla para determinar columnas comunes.¿Inner Join vs. Natural Join, speed-wise?

Por favor, comparta sus pensamientos/respuestas.

Respuesta

8

Va a depender del DBMS, y hasta cierto punto de las tablas unidas, y la diferencia generalmente no va a ser mensurable. Con INNER JOIN, habrá dos copias de las columnas comunes; con NATURAL JOIN, solo habrá una copia de las columnas comunes.

Si los resultados intermedios deben escribirse en el disco u ordenarse, habrá más datos para administrar, y hay un poco más de datos que se devolverán al cliente a través de la conexión cliente-servidor, por lo que una UNIÓN INTERNA podría tomar un poco más de tiempo que NATURAL UNIRSE. Si las columnas comunes son lo suficientemente grandes, campos de caracteres largos, por ejemplo, esta diferencia de tamaño podría ser significativa.

La diferencia de tiempo para preparar los dos tipos de unión es completamente insignificante. Ambos tienen que leer la información para todas las columnas en ambas tablas involucradas en la unión, y el procesamiento de esa información es sustancialmente similar.

Durante la ejecución, la copia de los datos para formar los resultados intermedios puede ser un poco más compleja para una UNIÓN NATURAL - porque no solo toma una copia de cada fila - pero no necesariamente toma una copia completa de cada fila para una UNIÓN INTERNA tampoco, por lo que la diferencia es nuevamente insignificante. Y, como antes, hay menos datos para copiar en conjunto para NATURAL JOIN, por lo que aún hay una pequeña ventaja.

Por lo tanto, en general, un NATURAL JOIN podría ser un poco más rápido que un INNER JOIN, pero la diferencia aún es insignificante.

+0

y más al punto, la diferencia no está relacionada con mirar la información de la estructura de la tabla. – siride

+1

@siride: sí, de hecho. Como mencioné, "el costo del tiempo de preparación es completamente insignificante" (ya que el proceso de preparación tiene que examinar todos los datos relevantes para ambas tablas, independientemente). –

+0

Debería leer más de cerca: - / – siride

1

En el caso excepcional, una unión natural puede ser tan rápida como una unión interna.

2

No me puedo imaginar que sea tan costoso encontrar columnas comunes que puedan respaldar esa hipótesis.

+0

Es más probable que dependa de que las uniones naturales por diseño no necesitan claves (digamos "índices"). Si bien puede hacer uniones internas sin claves reales es muy raro y "obviamente" incorrecto – stefan