2011-08-02 13 views
5

Tengo una tabla con una columna de fecha StartDate indexada. Me preguntaba cómo maneja la fase de optimización de consultas consultas de la siguiente forma:¿La fase de optimización de consultas considera esto?

SELECT * 
FROM <dbo.TABLE> 
WHERE (StartDate BETWEEN '2010-01-01' AND '2010-01-10') 
OR (StartDate BETWEEN '2010-01-05' AND '2010-01-15') 

hay una superposición entre las dos fechas. ¿Debo hacer la optimización de darle las fechas como (StartDate BETWEEN '2010-01-01' AND '2010-01-15') o el motor de SQL puede optimizar esto solo?

+1

¿Qué muestra el plan de ejecución? – gbn

+0

Me muestra el mismo plan. En realidad, permítanme profundizar en cada componente y volver en un minuto. – Legend

+0

Ok, muestra el mismo costo de E/S y CPU. Supongo que me hiciste responder mi propia pregunta. – Legend

Respuesta

5

Compárelo con variables y constantes: los planes deberían ser diferentes.

SQL Server puede optimizar las constantes pero tiene como objetivo la reutilización con variables. Entonces el plan es más general con variables. Cuando se usan constantes, no se requiere un "plan reutilizable generalizado" porque si las constantes cambian será un nuevo plan

Un plan "variable" no considerará condiciones como end < start que estarían en cortocircuito con constantes.

Como se señala en los comentarios a la pregunta, el comportamiento es el esperado

Usted debe hacer lo mismo sucede con las constantes "Forced Parameterization", pero no he probado.

Cuestiones relacionadas