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

¿Por qué ejecutar procedimientos almacenados es más rápido que una consulta SQL desde un script?

SQL Server básicamente sigue estos pasos para ejecutar cualquier consulta (llamada a procedimiento almacenado o instrucción SQL ad-hoc):

1) comprueba sintácticamente la consulta
2) si está bien, comprueba la memoria caché del plan para ver si ya tiene un plan de ejecución para esa consulta
3) si hay un plan de ejecución, ese plan es ( re-)utilizado y la consulta ejecutada
4) si aún no hay un plan, se determina un plan de ejecución
5) ese plan se almacena en la memoria caché del plan para su posterior reutilización
6) el se ejecuta la consulta

El punto es:SQL ad-hoc y los procedimientos almacenados son tratados no de manera diferente .

Si una consulta SQL ad-hoc utiliza correctamente los parámetros, como debería ser de todos modos, para evitar ataques de inyección SQL, sus características de rendimiento no son diferentes y definitivamente no peor. que ejecutar un procedimiento almacenado.

Los procedimientos almacenados tienen otros beneficios (no es necesario otorgar a los usuarios acceso directo a la tabla, por ejemplo), pero en términos de rendimiento, el uso de consultas SQL ad-hoc parametrizadas correctamente es igual de eficiente. como usar procedimientos almacenados.

Actualización: usando procedimientos almacenados sobre no parametrizados consultas es mejor por dos razones principales:

  • ya que cada consulta no parametrizada es una nueva, diferente consulta a SQL Server, tiene que pasar por todos los pasos para determinar el plan de ejecución, para cada consulta (perdiendo así tiempo y también desperdiciando espacio en la memoria caché del plan, ya que almacenar el plan de ejecución en la memoria caché del plan no ayuda al final). , ya que esa consulta en particular probablemente no ser ejecutado de nuevo)

  • las consultas no parametrizadas corren el riesgo de sufrir un ataque de inyección SQL y deben evitarse a toda costa