Tendrá que perdonar mi ingenuidad, ya que no soy un DBA, pero entiendo que con el tiempo las estadísticas de una base de datos cambian y se debe volver a compilar un procedimiento almacenado para mantener el plan de consultas actualizado con las últimas estadísticas.
Suponiendo que tengo un procedimiento almacenado en mi base de datos que se vuelve a compilar con las últimas estadísticas en un intervalo regular, ¿cuáles son las implicaciones de incluir el procedimiento almacenado en código y envolverlo en una sp_executesql
declaración? ¿Pierdo la actualización del plan de consultas que solía ocurrir como parte de la recopilación del procedimiento?
Si hay algo más (aparte de los permisos) que debo tener en cuenta antes de realizar este cambio, agradecería sus ideas.
Leí esto en MSDN:
La capacidad del optimizador de consultas de SQL Server para hacer coincidir la nueva cadena de Transact-SQL con un plan de ejecución existente se ve obstaculizada por los valores de parámetros que cambian constantemente en el texto de la cadena, especialmente en declaraciones complejas de Transact-SQL.
Entonces, suponiendo que el procedimiento almacenado que intento en línea y envolver sp_executesql
realmente contiene algunos parámetros, ¿esto dice que aunque mi plan de ejecución está en caché, estoy haciendo que sea más difícil para SQL Server encontrarlo y reutilizarlo?
fuente