Et meget hyppigt anvendt argument for at bruge stored procedures frem for parametriserede queries på SQL Server er performance.  Argumentet er, at eksekveringsplanen for sprocs kan caches på serveren.  Det er korrekt, at sådan forholdt det sig på SQL Server 7 og måske også på 2000, men efter min bedste overbevisning er SQL Server nu i stand til på samme måde at lave caching for parametriserede queries.

Det er svært at finde dokumentation af dette (hvis du har links, så giv dem til mig!), så jeg besluttede at lave et lille forsøg: Jeg lavede en lille testtabel og prøvede at indsætte 100.000 rækker 50 gange med en sproc og med en parametriseret INSERT statement.

Konklusionen?

Jeg kunne ikke se nogen forskel.  Selvfølgelig svinger tiderne noget i forhold til, hvad serveren ellers laver, men man kan ikke se, at den ene metode er hurtigere end den anden.

Der kan selvfølgelig være mange andre argumenter for at sprocs - f.eks. security.  Det vil jeg ikke gå yderligere ind i her, for det plejer at kunne få folk helt op at køre.

Historien er en anden med dynamisk opbygget SQL.  Her kan SQL Server ikke cache.  Men dynamisk opbygget SQL er i forvejen bandlyst pånær i særlige tilfælde, da det øger risikoen for SQL injection.

Kommentarerne er lukkede