Pregunta

He leído sobre el OPTIMIZAR SQL Server 2008 para sugerencia de consulta desconocido. Entiendo cómo funciona.

Sin embargo, tengo una pregunta sobre donde y cuando para utilizarlo. No se puede especificar dentro de una UDF. Se puede especificar dentro de un procedimiento almacenado. Sin embargo, este MSDN blog en estados, la siguiente :

4.Moving una consulta en un procedimiento almacenado puede ponerlo en una separada contexto procesal y puede ser una buena manera de conseguir ese valor visible para el optimizador (Nota: Esto funciona de SQL 2000 también)

Eso me parece estar diciendo que cualquier parámetro pasado a un procedimiento almacenado será "olfateó", ayudando así a SQL Server para compilar un plan de ejecución óptima. Esto es lo que implica que el plan almacenado en caché se revisaría / a compilar (no estoy seguro de que el mecanismo). Sin embargo, esto es confuso, porque niega toda la necesidad de OPTIMIZACIÓN DE DESCONOCIDO.

El artículo de MSDN sobre las sugerencias de consulta no cubre mi pregunta.

alguien respuesta

Can esto por mí, a ser posible con un puntero a algo de Microsoft que aclara esto. Gracias.

¿Fue útil?

Solución

El comportamiento predeterminado del compilador SQL es utilizar los valores de los parámetros dados en la primera ejecución de un SP para ayudar a optimizar el plan (véanse los párrafos 2 y 3 de este artículo MSDN en SP recompilación ). Ese plan se almacena en caché a continuación para su reutilización hasta que sale de la caché - un montón de detalles sobre el proceso de almacenamiento en caché del plan aquí .

El MSDN blog en el que citar se encuentra observando maneras de hacer este proceso más fácil para el compilador; Creo que el punto 4 (citado en la pregunta) sugiere que esto es una ventaja de los procedimientos almacenados más de SQL ad-hoc.

La sugerencia OPTIMIZE FOR UNKNOWN indica al compilador Es necesario comunicar el comportamiento predeterminado; que debería ignorar los valores de los parámetros dados en la primera ejecución y seleccionar un plan más generalizada. Esta es una versión más extrema del elemento 2 en la lista de sugerencias al final de la entrada de blog citadas en la pregunta;

2 Si encuentra que el optimizador es recogiendo diferentes planes con el tiempo que tener un rendimiento variable características, considere el uso de una parámetro de pista con un representante valor “promedio” para conseguir una buena, común plan de consulta que funcione razonablemente para todos los valores.

pero en lugar de seleccionar un valor medio o representativo, el compilador ignorará eficazmente los valores de parámetro por completo.

Considere el uso de OPTIMIZE FOR UNKNOWN en las circunstancias dadas citado en el punto 2 - cuando la misma consulta da un rendimiento muy variables porque el plan es deficiente en algunas circunstancias -. Normalmente cuando los parámetros en las columnas del filtro de consulta de cardinalidad muy variables

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top