Die folgenden Tests wurden auf einem 100 MHz Pentium mit Windows for Workgroups 3.11, 16 MB Hauptspeicher, PCI-Bus, Adaptec SCSI-Kontroller und 1 MB SCSI-Festplatte, 20 MB permanenter Auslagerungsdatei, 512 kB Cache (Windows-Systemsteuerung, 386 erweitert, Virtueller Speicher) und 2048 SmartDrive-Cache durchgeführt.
Nach dem Laden von Windows und Oberon waren noch verfügbar:
21771 kB Speicher
72% System-Ressourcen
Nach dem Starten der Oracle-Datenbank waren nur mehr verfügbar:
10028 kB Speicher
70% System-Ressourcen
In den folgenden Tests wurden die Datenbanktreiber MS Access 2.0 (des ODBC SDKs) und Personal Oracle 7 miteinander verglichen. Die Verbindungszeichenketten zu den beiden Datenbanktreibern waren:
"DSN=Access_sdk20;DBQ=C:\ODBCSDK\SMPLDATA\ACCESS\SAMPLE.MDB;
FIL=RedISAM;"
und
"DSN=TestDB;DBQ=2:;UID=SCOTT;PWD=TIGER"
.
Test 1: Verbinden mit Datenbank, viermal hintereinander die Testtabellen löschen und neu anlegen, Verbindung schließen und Garbage-Collector aufrufen. Da das Schließen der Verbindung implizit über den Mechanismus der Finalisierung (siehe Kapitel ) passiert, ist es notwendig, einen Garbage-Collector-Durchlauf zu erzwingen. Die Zeit dafür beträgt allerdings nur Sekundenbruchteile und verfälscht das Ergebnis nicht.
System.Time
ODBCBench.Connect
ODBCBench.DropTables
ODBCBench.CreateTables
ODBCBench.DropTables
ODBCBench.CreateTables
ODBCBench.DropTables
ODBCBench.CreateTables
ODBCBench.DropTables
ODBCBench.CreateTables
ODBCBench.Disconnect
System.Collect
System.Time
nn¯
Batch.Start
~
Test 2: Verbinden mit Datenbank, in TestTabelle 1 100 Datensätze einfügen, Verbindung schließen und Garbage-Collector aufrufen.
System.Time
ODBCBench.Connect
ODBCBench.InsertIntoBench1
ODBCBench.Disconnect
System.Collect
System.Time
nn¯
Batch.Start
~
Test 3: Verbinden mit Datenbank, an TestTabelle 1 100 Datensätze anhängen, Verbindung schließen und Garbage-Collector aufrufen.
System.Time
ODBCBench.Connect
ODBCBench.AppendToBench1
ODBCBench.Disconnect
System.Collect
System.Time
nn¯
Batch.Start
~
Test 4: Verbinden mit Datenbank, in TestTabelle 2 100 Datensätze einfügen, Verbindung schließen und Garbage-Collector aufrufen.
System.Time
ODBCBench.Connect
ODBCBench.InsertIntoBench2
ODBCBench.Disconnect
System.Collect
System.Time
nn¯
Batch.Start
~
Test 5: Verbinden mit Datenbank, viermal "`SELECT Bench1.val FROM Bench1, Bench2 WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' mit Zeichenkettenparameter (Wert: "`%14%"') ausführen, Verbindung schließen und Garbage-Collector aufrufen (Testtabelle 1 enthält 200 Datensätze, Testtabelle 2 enthält 100 Datensätze)
System.Time
ODBCBench.Connect
ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2
WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%14%"'
ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2
WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%14%"'
ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2
WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%14%"'
ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2
WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%14%"'
ODBCBench.Disconnect
System.Collect
System.Time
nn¯
Batch.Start
~
Test 6: Verbinden mit Datenbank, an TestTabelle 1 2000 Datensätze anhängen, Verbindung schließen und Garbage-Collector aufrufen.
System.Time
ODBCBench.Connect
ODBCBench.InsertIntoBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.AppendToBench1
ODBCBench.Disconnect
System.Collect
System.Time
nn¯
Batch.Start
~
Test 7: Verbinden mit Datenbank, viermal "`SELECT Bench1.val FROM Bench1, Bench2 WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' mit Zeichenkettenparameter (Wert: "`%1%"') ausführen, Verbindung schließen und Garbage-Collector aufrufen (Testtabelle 1 enthält 2000 Datensätze, Testtabelle 2 enthält 100 Datensätze)
System.Time
ODBCBench.Connect
ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2
WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'
ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2
WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'
ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2
WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'
ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2
WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'
ODBCBench.Disconnect
System.Collect
System.Time
nn¯
Batch.Start
~
Test 8: Verbinden mit Datenbank, in TestTabelle 3 11 lange Datensätze einfügen und wieder auslesen (mit Verifikation), Verbindung schließen und Garbage-Collector aufrufen.
System.Time
ODBCBench.Connect
ODBCBench.InsertLongData
ODBCBench.GetLongData
ODBCBench.Disconnect
System.Collect
System.Time
nn¯
Batch.Start
~
Test 9: Verbinden mit Datenbank, "`SELECT count(*) FROM Bench1, Bench1 Again"' (2000 Datensätze in Bench1),
System.Time
ODBCBench.Connect
ODBCBench.Execute "`SELECT count(*) FROM Bench1, Bench1 Again"'
ODBCBench.Disconnect
System.Collect
System.Time
nn¯
Batch.Start
~
Test 10: Verbinden mit Datenbank, Indizes erstellen, dann wie Test7
System.Time
ODBCBench.Connect
ODBCBench.Execute "`CREATE INDEX idx1 ON Bench1 (i)"'
ODBCBench.Execute "`CREATE INDEX idx2 ON Bench2 (i)"'
ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2 WHERE
(Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'
ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2 WHERE
(Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'
ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2 WHERE
(Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'
ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2 WHERE
(Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'
ODBCBench.Disconnect
System.Collect
System.Time
nn¯
Batch.Start
~
Die in der folgenden Tabelle abgedruckten Ergebnisse sind die in Sekunden gemessenen Zeiten. Es fällt auf, daß der Datenbanktreiber von MS Access in den meisten Fällen ganz gut abschneidet, daß aber der Oracle-Datenbanktreiber bei Abfragen schneller Ergebnisse liefert (auch schon ohne Indizes).
Table: Gemessene Zeiten (in Sekunden) für die einzelnen Tests