Consejo de rendimiento Evite utilizar el prefijo SP_ en procedimientos almacenados

Los desarrolladores de bases de datos a menudo nombran procedimientos almacenados con el SP_ prefijo en SQL Server. El prefijo SP_ ayuda a otros desarrolladores a identificar rápidamente un objeto como un procedimiento almacenado. Aunque ha habido muchos debates sobre si los objetos creados por el usuario deben o no nombrarse con el prefijo sp_ siguiendo los estándares de la convención de nombres, No debemos nombrar nuestros procedimientos almacenados en SQL Server con el prefijo SP_. Este tutorial de Recetas Técnicas explica por qué debemos evitar el uso del prefijo SP_ en procedimientos almacenados en SQL Server.

1. Si creamos un procedimiento almacenado con el prefijo SP_, SQL Server lo considera como un procedimiento almacenado del sistema y primero realiza una búsqueda en la base de datos de ‚Ägasastros para comprobar si ese procedimiento almacenado existe allí. Más adelante en la base de datos de usuarios, esto agrega una pequeña sobrecarga en el rendimiento.

2. Los procedimientos almacenados con el prefijo SP_ se consideran procedimientos almacenados especiales de un sistema, que se almacenan en la base de datos maestra.

3. Agregar el prefijo SP_ al crear un procedimiento almacenado en las bases de datos de usuarios puede entrar en conflicto con los procedimientos almacenados del sistema disponibles en la base de datos maestra.

4.Aquí hay una razón adicional para evitar el uso del prefijo sp_ en los procedimientos almacenados de los Libros en pantalla de Microsoft:

Evite el uso del prefijo sp_ al nombrar procedimientos. SQL Server utiliza este prefijo para designar procedimientos del sistema. El uso del prefijo puede hacer que el código de la aplicación se rompa si hay un procedimiento del sistema con el mismo nombre.

El procedimiento sp_help es un procedimiento incorporado que se almacena en la base de datos maestra. Si inesperadamente creas un procedimiento en una base de datos de usuarios con el mismo nombre, el procedimiento de la base de datos maestra aún se ejecutará, anulando tu procedimiento almacenado. A continuación se muestra un ejemplo.

Crear un procedimiento almacenado con sp_help nombre en tempdb.

Use tempdb GO CREATE PROCEDURE sp_help COMO COMENZAR A IMPRIMIR 'Necesito ayuda inmediata, estoy en tempdb'; FIN 

Vamos a ejecutar el procedimiento almacenado de tempdb.

Use tempdb GO EXEC sp_help - El resultado esperado es "Necesito ayuda inmediata, estoy en tempdb" 

Luego, obtenemos un resultado inesperado porque sp_help es un procedimiento almacenado del sistema que existe en la base de datos maestra. Por lo tanto, SQL Server ha ejecutado el procedimiento almacenado desde el maestro en lugar de ejecutar el SP creado por el usuario Äúsp_help´s de tempdb porque tiene la primera preferencia.

Veamos usando el Analizador de SQL Server cómo ocurre un evento CacheMiss cuando intentamos ejecutar un procedimiento almacenado que existe en la base de datos maestra y también en la base de datos tempdb.

Caché: En la siguiente imagen, puede ver que se ha producido un evento CacheMiss al ejecutar el EXEC sp_help procedimiento de tempdb. Esto indica que SQL Server intentó encontrar el plan de ejecución para sp_help SP en tempdb, pero no lo encontró en el caché del plan. Por lo tanto, se ha producido un evento CacheMiss que también podría ser un éxito de rendimiento.

Resumen: Utilizando SP_ Como un prefijo para procedimientos almacenados en SQL Server tiene un impacto en el rendimiento considerando que SQL Server tiene que hacer la primera búsqueda en la base de datos maestra para verificar. Además, un evento CacheMiss indica que el servidor SQL busca el plan de ejecución en la base de datos del usuario, pero no lo encuentra.