Okay okay, så gør jeg det da
Info om testen: Den er foretaget op imod en lokal instans af MSSQL Server 2000 på en lokal Windows 2003 server. Jeg har to funktioner, der gør præcis det samme, men med hver deres provider: De truncater en tabel ved navn "test", så den er 100% clean. Derefter indsættes der X antal rækker via et for loop, hvor efter der køres en "SELECT *" på test tabellen, der returnerer en OdbcDataReader/SqlDataReader. Både SELECT og itereringen igennem readeren loopes X antal gange, men uden at gøre noget som helst ved de udtrukne data, for at forstyrre resultatet mindst muligt. Tabellen er i øvrigt meget simpel: En identity kolonne ved navn "id", og en varchar kolonne med navnet "name". En mere avanceret tabel, med nogle større felter, fx TEXT, kunne måske have givet større forskelle
.
Stopwatch klassen bruges til at måle, og det startes i toppen af funktionen, stoppes i bunden, hvorefter resultatet udskrives. De to funktioner hedder henholdsvis RunOdbcTest() og RunSqlTest() og de køres fra Page_Load metoden på en simpel ASPX side uden andet indhold. For at resultatet skal være så fair som mulig, så har jeg løbende byttet rundt på de to metodekald, så den ene ikke altid køres før den anden, hvilket også kan ses på rækkefølgen af output
. For at den ene metode ikke skal truncate en større tabel end den anden, er hver test kørt to gange, og kun resultatet af anden kørsel er med. Her er resultaterne så:
Kører 100 INSERT og SELECT iterationer:
SQL: 128ms elapsed
ODBC: 147ms elapsed
-------------------------------------------
Kører 500 INSERT og SELECT iterationer:
ODBC: 1232ms elapsed
SQL: 1105ms elapsed
-------------------------------------------
Kører 1000 INSERT og SELECT iterationer:
SQL: 3270ms elapsed
ODBC: 4295ms elapsed
-------------------------------------------
Kører 5000 INSERT og SELECT iterationer:
ODBC: 54136ms elapsed
SQL: 53488ms elapsed
-------------------------------------------
For the record så åbnes forbindelsen til databasen kun én gang pr. provider, dvs. to gange i alt. Det havde nok været mere website agtigt at åbne og lukke den en masse, for at simulere en masse pageviews, men det her var lige nemmere og hurtigere
Hvis andre har lyst til at køre en lignende test skal de være velkomne
Mvh.
Kasper (TSW)
Indlæg senest redigeret d. 22.09.2008 14:25 af Bruger #1