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

¿Por qué esta subconsulta (no correlacionada) está causando tales problemas?

Según mi experiencia, cuanto más complejas se vuelven sus consultas, menos capaz es el optimizador de SQL para crear planes hábiles. Aquí tiene 16 uniones, algunas o la mayoría son uniones externas, tiene al menos una subconsulta... agregue suficientes índices, cardinalidades, vistas, aplicaciones externas y quién sabe qué más y nadie, ni siquiera Microsoft. ingenieros*, pueden descubrir rutinas que generarán de manera uniforme y regular los planes más óptimos.

Lo que has descrito, lo he experimentado numerosas veces:cambiar una cosa simple en una consulta desordenada y todo es un orden de magnitud más rápido (o, rechinar los dientes, más lento). No tengo un método para determinar cuándo complejo es demasiado complejo, es más un sentimiento que otra cosa. Mi regla general es, si parece demasiado largo o demasiado complejo, simplifique donde pueda, como su valor anidado único preseleccionado, o rompiendo parte de la consulta que siempre ejecutar rápido con un pequeño conjunto de resultados, ejecutarlo primero y almacenar los resultados en una tabla temporal.

(* Tenga en cuenta que esto es sarcsam leve)