Databasutvecklare namnger ofta lagrade procedurer med sp_ prefix i SQL Server. SP_-prefixet hjälper andra utvecklare att snabbt identifiera ett objekt som en lagrad procedur. Även om det har förekommit många debatter om huruvida användarskapade objekt ska benämnas med sp_-prefixet enligt namnskonventionens normer, vi ska inte namnge våra lagrade procedurer i SQL Server med SP_ prefixet. Denna tutorial för Tech-Recipes förklarar varför vi borde undvika att använda SP_-prefixet i lagrade procedurer i SQL Server.
1. Om vi skapar en lagrad procedur med SP_-prefixet, anser SQL Server det som en systemlagrad procedur och gör en sökning i Äumaster, databasen först för att kontrollera om den lagrade proceduren finns där. Senare i användardatabasen lägger detta lite överkostnad i prestanda.
2. Lagrade procedurer med prefix SP_ betraktas som ett systems speciella lagrade procedurer som lagras i huvuddatabasen.
3. Lägga till SP_-prefixet medan du skapar en lagrad procedur i användardatabaser kan störa systemlarmprocedurer som finns i huvuddatabasen.
4.Här är en ytterligare anledning att undvika att använda sp_ prefixet i lagrade procedurer från Microsoft Books Online:
Undvik användningen av sp_ prefixet när namngivningsprocedurerna används. Detta prefix används av SQL Server för att ange systemprocedurer. Använda prefixet kan orsaka att programkoden bryts om det finns ett systemförfarande med samma namn.
Sp_help-proceduren är ett inbyggt förfarande som lagras i huvuddatabasen. Om du oväntat skapar ett förfarande i en användardatabas med samma namn, kommer proceduren från masterdatabasen fortfarande att utföras, vilket överväger din lagrade procedur. Nedan är ett exempel.
Skapa en lagrad procedur med sp_help namn i tempdb.
Använd tempdb GÅ CREATE PROCEDURE sp_help AS BEGIN PRINT "Jag behöver omedelbar hjälp, jag är i tempdb"; SLUTET
Låt oss köra den lagrade proceduren från tempdb.
Använd tempdb GO EXEC sp_help - Förväntad produktion är "Jag behöver omedelbar hjälp, jag är i tempdb"
Efteråt får vi oväntade resultat eftersom sp_help är ett systemlagrat förfarande som finns i huvuddatabasen. Därför har SQL Server kör den lagrade proceduren från mastern istället för att köra användarskapad SP, Äúsp_help,Äù från tempdb eftersom den har den första preferensen.
Låt oss se hur du använder SQL Server Profiler hur en CacheMiss-händelse inträffar när vi försöker köra en lagrad procedur som finns i huvuddatabasen och även i tempdb-databasen.
CacheMiss: I den följande bilden kan du se att en CacheMiss-händelse har uppstått när du kör EXEC sp_help procedur från tempdb. Detta indikerar att SQL Server försökte hitta exekveringsplanen för sp_help SP i tempdb, men den hittade den inte i plancache. Därför har en CacheMiss-händelse inträffat, vilket också kan vara ett resultat.
Sammanfattning: Använder sig av sp_ som ett prefix för lagrade procedurer i SQL Server har en prestationspåverkan med tanke på att SQL Server måste göra den första sökningen i huvuddatabasen för att kontrollera. En CacheMiss-händelse indikerar också att SQL-servern söker efter exekveringsplanen i användardatabasen men inte hittar den.