2008-10-16 21 views
7

Duplicar posibles:
Are Stored Procedures more efficient, in general, than inline statements on modern RDBMS's?son procedimientos almacenados más rápido para consultas sencillas

Si yo estoy ejecutando un procedimiento almacenado para consultas básicas, tales como:

SELECT ColA, ColB FROM MyTable WHERE ID = 123; 
SELECT * FROM MyTable,OtherTable WHERE MyTable.ID = OtherTable.ID ORDER BY CreatedAt desc 

¿Hay alguna beneficio para convertir esas consultas a un procedimiento almacenado si se ejecutan con frecuencia? ¿Cuándo es mejor utilizar un aprovisionamiento almacenado? ¿Cuándo debería no usar un procedimiento almacenado?

¿Qué tipo de optimizaciones ocurre si crea y ejecuta un procedimiento almacenado? ¿Me puede recomendar algún recurso que me ayude a comprender cuándo y por qué debo usarlos?

Si hace alguna diferencia, mi base de datos es MS SQL 2005 db.

Respuesta

12

Razones para el uso de procedimientos almacenados:

  • reducir el tráfico de red - que tienen que enviar la instrucción SQL a través de la red. Con sprocs, puede ejecutar SQL en lotes, que también es más eficiente.
  • plan de consulta de almacenamiento en caché - la primera vez que se ejecuta el sproc, SQL Server crea un plan de ejecución, que se almacena en caché para su reutilización. Esto es particularmente eficaz para pequeñas consultas que se ejecutan con frecuencia.
  • Posibilidad de usar los parámetros de salida - si envía SQL en línea que devuelve una fila, solo puede recuperar un conjunto de registros. Con sprocs puede recuperarlos como parámetros de salida, que es considerablemente más rápido.
  • Permisos - cuando envía SQL en línea, tiene que conceder permisos en la tabla (s) para el usuario, que se concede un acceso mucho más que permiso meramente concesión para ejecutar un procedimiento almacenado
  • separación de la lógica - elimine el código generador de SQL y segregalo en la base de datos.
  • Posibilidad de editar sin recompilar - esto puede ser controvertido. Puede editar el SQL en un sproc sin tener que volver a compilar la aplicación.
  • Encuentra dónde se usa una tabla - con sprocs, si quiere encontrar todas las declaraciones SQL que hacen referencia a una tabla en particular, puede exportar el código sproc y buscarlo. Esto es mucho más fácil que tratar de encontrarlo en el código.
  • Optimización - Es más fácil para un DBA optimizar el SQL y ajustar la base de datos cuando se utilizan sprocs. Es más fácil encontrar índices faltantes y tal.
  • ataques de inyección SQL - correctamente escrito en línea SQL puede defenderse de los ataques, pero los sprocs son mejores para esta protección.
+0

Puntos excelentes. Deseo especialmente que más programadores se den cuenta de cuán vulnerables son sus bases de datos si establecen permisos a nivel de tabla. – HLGEM

+1

Scary, ¿eh?Si lo estoy entendiendo correctamente, muchas operaciones de Linq que usan SQL generado en lugar de procedimientos almacenados solo están aumentando la práctica del acceso directo a la tabla. Sigue recibiendo tu mensaje! – DOK

Cuestiones relacionadas