webForumDet fria alternativet
Logga in / Bli medlem

Speciell SQL i SQL-server

Databaser & SQL

5 svar · 203 visningar · startad av Erik Juhlin

Medlem sedan maj 200010 687 inlägg
Trådstart#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?

Medlem sedan juni 20022 599 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

Medlem sedan dec. 20003 887 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.

Medlem sedan maj 200010 687 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. :)

Medlem sedan maj 200010 687 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
Medlem sedan dec. 20003 887 inlägg
#6

Jepp :)

244 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
115 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
116 ms — ändringar (db)