Saltar al contenido

¿Es un JOIN más rápido que un WHERE?

Ten en cuenta que en las ciencias cualquier problema casi siempre tiene diferentes soluciones, así que compartiremos lo más óptimo y eficiente.

Solución:

En teoría, no, no debería ser más rápido. El optimizador de consultas debería poder generar un plan de ejecución idéntico. Sin embargo, algunos motores de base de datos pueden producir mejores planes de ejecución para uno de ellos (no es probable que suceda para una consulta tan simple, pero sí lo suficientemente compleja). Debe probar ambos y ver (en su motor de base de datos).

Rendimiento de “JOIN” frente a “WHERE”… todo depende de qué tan bien el motor de la base de datos pueda optimizar la consulta por usted. Tendrá en cuenta los índices que pueda tener en las columnas que se devuelven y considerará que el rendimiento de las cláusulas WHERE y JOIN también se reduce al archivo de la base de datos física en sí y a su nivel de fragmentación e incluso a la tecnología de almacenamiento que utiliza para almacenar los archivos de la base de datos. .

El servidor SQL ejecuta consultas en el siguiente orden (esto debería darle una idea de las funciones de las cláusulas WHERE y JOIN)

Orden de proceso de consulta de Microsoft SQL Server

lo siguiente está tomado de la excelente serie de libros sobre Microsoft SQL Server, Dentro de Microsoft SQL Server 2005: consulta T-SQL que se puede encontrar aquí

(Paso 8) SELECCIONAR (Paso 9) DISTINTO (Paso 11)

(Paso 1) DESDE mesa_izquierda
(Paso 3)
unirse_tipo UNIRSE tabla_derecha
(Paso 2) ENCENDIDO unirse_condición
(Paso 4) DONDE
donde_condicion
(Paso 5) AGRUPAR POR group_by_list
(Paso 6) CON [CUBE|ROLLUP]
(Paso 7) TENER
tener_clausula
(Paso 10) ORDENAR POR ordenar_por_lista

No hay forma de responder correctamente a esto sin limitarse a una base de datos de destino.

Para MS-SQL, ambas consultas dan como resultado el mismo planes de ejecución, pero tenga en cuenta:

SELECT *
FROM Document, DocumentStats
WHERE DocumentStats.Id = Document.Id
  AND DocumentStats.NbViews > 500

Es realmente arriesgado ya que es fácil olvidar la condición de combinación en la cláusula WHERE y terminar con una combinación cruzada desagradable.

Sección de Reseñas y Valoraciones

Si haces scroll puedes encontrar las anotaciones de otros administradores, tú además tienes el poder dejar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *