Erik JuhlinMedlem sedan maj 20007 625 inlägg
Varför är denna SQL...
EXEC sp_executesql N'SELECT * FROM tblG_Site WHERE SiteId = @i0', N'@i0 int', 1
...snabbare än denna...
SELECT * FROM tblG_Site WHERE SiteId = 1
Är det smartare cachning och/eller beror det på att man specificerar typen på variablen? Eller kanske något annat?
nikoMedlem sedan juni 20022 415 inlägg
Om den är snabbare allra första gången så vet jag inte.
Annars:
Because the Transact-SQL statement itself remains constant and only the parameter values change, the Microsoft® SQL Server™ query optimizer is likely to reuse the execution plan it generates for the first execution.
Källa:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ea-ez_2h7w.asp
Engine^Medlem sedan dec. 20002 861 inlägg
testa köra den som:
EXEC sp_executesql N'SELECT * FROM tblG_Site WHERE SiteId = @i0', N'@i0 int', 1 WITH RECOMPILE
Det tvingar Query optimizer:n att skapa en ny execution plan varje gång och således borde de två metoderna ta lika lång tid om inte sp_executesql tar längre tid t.o.m.
Erik JuhlinMedlem sedan maj 20007 625 inlägg
Okej, bättre cachning då...
Men jag gjorde lite enkla testar och jag fick uppfattningen av att det gick snabbare även första gången. :)
Erik JuhlinMedlem sedan maj 20007 625 inlägg
Man kan se det lite som att det bara är den fet-stilade delen som cachas?
EXEC sp_executesql N'[b]SELECT * FROM tblG_Site WHERE SiteId = @i0[/b]', N'@i0 int', 1
Engine^Medlem sedan dec. 20002 861 inlägg