Jimmy wrote:
> Havde egentlig indtrykket af at Sored procedures altid var hurtigere, men
Det er korrekt for de fleste database typer. Det er kun enkelte
databasesystemer, såsom Microsoft SQL Server 2000, hvor det ikke er
tilfældet. Mig bekendt er det dog tilfældet i tidligere udgaver er MS SQL
Server.
Men ellers kan forskellen mellem stored procedure og ikke stored procedure
være så lille, at man bør overveje at smide SQL'erne ind i klienten
alligevel, for at bevare en veldesignet database. Hvis alt blev lavet som
stored procedures, ville man jo få tusindvis af dem i en typisk database
applikation.
> Følgende er skrevet ud ved at køre forespørgslerne i Query analyzeren:
Du skriver ikke, hvilket database system du bruger...
Hvis du f.eks. bruger Firebird, skal du bare sørge for at køre prepared
queries på klienten, og det er ligemeget, hvilken type SQL statements, du
fyrer af, og stort set ligemeget, om du kører alt i en transaktion eller i
flere.
Hvis du bruger MSSQL server, så er det en større videnskab at
hastighedsoptimere, da skidtet kan finde på at låse både records og
tabeller, og endda kan finde på noget så grotesk at lade transaktioner
udføre serielt hvis du laver de rette SQL statements.
Jeg kan ikke lige bruge dine tal til så meget - der er nemlig mange
parametre, der afgør, hvilken løsning, der er bedst. Den bedste løsning
kan:
1) Reducere performancenedsættelsen af andre, samtidige queries.
2) Levere første record hurtigst muligt (især vigtigt på websider)
3) Levere alle records hurtigst muligt
Og hvis man bruger et af de database systemer, der bruger log-filer, som
f.eks. Microsoft SQL Server, og hvis man kun har et harddisk system til sin
database, så skal man derudover også tage hensyn til, hvor meget der
skrives til log-filen.
Du kan selvflg. godt optimere din forespørgsel ved at måle op mod en bestemt
database server, med en bestemt datamængde og et bestemt netværk ved at
måle tiden for udførsel af din forespørgsel - men det er ikke særligt
sandsynligt, at din SQL statement vil opføre sig ligesådan andre steder.
Det er også derfor, at ibexpert (
http://www.ibexpert.com/) ikke bekymrer sig
så meget om tider, når den analyserer en query, men i højere grad viser
hvordan din query er udført, hvilke indekser, der er blevet berørt, hvor
mange uindekserede opslag, der er foretaget etc. Så kan man selv danne sig
et overblik, om det virker efter hensigten.
Lars.
--
Freelance programmør