webForumDet fria alternativet

Speciell SQL i SQL-server

5 svar · 203 visningar · startad av Erik Juhlin

Erik JuhlinMedlem sedan maj 20007 625 inlägg
#1

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
#2

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
#3

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
#4

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
#5

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
#6

Jepp :)

Genererad på 364 ms · cache AV · v20260730165559-full.f96bc7eb