sql >> Base de Datos >  >> RDS >> Sqlserver

UNION ALL vs OR condition en la consulta del servidor sql

El problema es que está especificando dos condiciones con OR que se aplican a tablas separadas en su consulta. Debido a esto, la búsqueda de índice no agrupado tiene que devolver la mayoría o todas las filas de su tabla grande porque la lógica OR significa que también pueden coincidir con la cláusula de condición en la segunda tabla.

Mire el plan de ejecución de SQL en los tres ejemplos anteriores y observe la cantidad de filas que salen de la búsqueda de índice no agrupado de la tabla grande. El resultado final solo puede devolver 1,000 o menos de las 800,000 filas en la tabla, pero la cláusula OR significa que los contenidos de esa tabla deben tener una referencia cruzada con el condicional en la segunda tabla, ya que OR significa que pueden ser necesarios para el resultado final. salida de la consulta

Dependiendo de su plan de ejecución, la búsqueda de índice puede extraer las 800 000 filas en la tabla grande porque también pueden coincidir con las condiciones de la cláusula OR en la segunda tabla. UNION ALL son dos consultas separadas en una tabla cada una, por lo que la búsqueda de índice solo tiene que generar el conjunto de resultados más pequeño que podría coincidir con la condición de esa consulta.

Espero que esto tenga sentido. Me encontré con la misma situación mientras refactorizaba sentencias SQL de ejecución lenta.

Saludos,

André Ranieri