Hallo
ich habe eine Art Personalverwaltung entwickelt, die über ADO auf verschiedene Datenbanken zugriefen kann (u.a. Access, MSDE, MySQL, Firebird). Im Programm verwende ich den ReportBuilder, um Berichte zu erzeugen. Dabei ist mir folgendes aufgefallen:
Zur Erstellung von Statistik-Berichten (Kreuztabellen) mit komplexen Abfragen werden je nach Datenbank extrem unterschiedliche Zeiten benötigt, hier einige Beispiele (alle Datenbanken liegen auf Server, Aufruf erfolgte vom Client aus):
Access : 7 sec (Zugriff über MS Jet 4.0 OLE DB Provider)
Firebird: 7 sec (Zugriff über ZStyle IBOLE Provider)
MSDE :75 sec!(Zugriff über MS OLE DB Provider for SQL Server)
MySQL: 80 sec (Zugriff ODBC-Treiber und MS OLE DB Provider for ODBC Drivers)
Firebird: 90 sec (Zugriff ODBC-Treiber und MS OLE DB Provider for ODBC Drivers)
Die langen Zeiten bei den ODBC-Treibern kann ich ja noch irgendwie verstehen, was mich aber wundert, ist der fast ebenso langsame Zugriff auf MSDE über ADO. Hat jemand hierfür eine Erklärung?
Sicherlich könnte man jetzt einwenden, dass die Abfragen für jede Datenbank optimiert werden müssten. An diese komme ich aber gar nicht ran, da sie vom ReportBuilder zur Laufzeit generiert werden (im übrigen können die Benutzer die Berichte selbst erstellen, d.h. es ist garnicht absehbar, welche Abfragen vorkommen). Wenn man sich aber mal die Unterschiede bei einer Firebird-Datenbank ansieht (7 sec beim ZStyle IBOLE Provider, 90 sec beim ODBC-Treiber und MS OLE DB Provider for ODBC Drivers) scheint die eigentliche Ursache der ODBC-Zugriff zu sein. Da die MSDE (mit OLE DB-Zugiff) aber mit 75 sec in der gleichen Größenordnung liegt wie die ODBC-Zugriffe, könnte man auf den Verdacht kommen, dass der MS OLE DB Provider for SQL Server in Wirklichkeit ein "verkappter" ODBC-Treiber ist. Ein weiterer Test mit der MSDE, aber Zugriff über ODBC-Treiber und MS OLE DB Provider for ODBC Drivers brachte nämlich fast identische Zeiten wie beim Zugriff über MS OLE DB Provider for SQL Server.
Was mich auch überrascht hat, war die gute Leitsung von Access.
Ich verwendet übrigens Delphi 7.1 und ADO-Version 2.8.
ich habe eine Art Personalverwaltung entwickelt, die über ADO auf verschiedene Datenbanken zugriefen kann (u.a. Access, MSDE, MySQL, Firebird). Im Programm verwende ich den ReportBuilder, um Berichte zu erzeugen. Dabei ist mir folgendes aufgefallen:
Zur Erstellung von Statistik-Berichten (Kreuztabellen) mit komplexen Abfragen werden je nach Datenbank extrem unterschiedliche Zeiten benötigt, hier einige Beispiele (alle Datenbanken liegen auf Server, Aufruf erfolgte vom Client aus):
Access : 7 sec (Zugriff über MS Jet 4.0 OLE DB Provider)
Firebird: 7 sec (Zugriff über ZStyle IBOLE Provider)
MSDE :75 sec!(Zugriff über MS OLE DB Provider for SQL Server)
MySQL: 80 sec (Zugriff ODBC-Treiber und MS OLE DB Provider for ODBC Drivers)
Firebird: 90 sec (Zugriff ODBC-Treiber und MS OLE DB Provider for ODBC Drivers)
Die langen Zeiten bei den ODBC-Treibern kann ich ja noch irgendwie verstehen, was mich aber wundert, ist der fast ebenso langsame Zugriff auf MSDE über ADO. Hat jemand hierfür eine Erklärung?
Sicherlich könnte man jetzt einwenden, dass die Abfragen für jede Datenbank optimiert werden müssten. An diese komme ich aber gar nicht ran, da sie vom ReportBuilder zur Laufzeit generiert werden (im übrigen können die Benutzer die Berichte selbst erstellen, d.h. es ist garnicht absehbar, welche Abfragen vorkommen). Wenn man sich aber mal die Unterschiede bei einer Firebird-Datenbank ansieht (7 sec beim ZStyle IBOLE Provider, 90 sec beim ODBC-Treiber und MS OLE DB Provider for ODBC Drivers) scheint die eigentliche Ursache der ODBC-Zugriff zu sein. Da die MSDE (mit OLE DB-Zugiff) aber mit 75 sec in der gleichen Größenordnung liegt wie die ODBC-Zugriffe, könnte man auf den Verdacht kommen, dass der MS OLE DB Provider for SQL Server in Wirklichkeit ein "verkappter" ODBC-Treiber ist. Ein weiterer Test mit der MSDE, aber Zugriff über ODBC-Treiber und MS OLE DB Provider for ODBC Drivers brachte nämlich fast identische Zeiten wie beim Zugriff über MS OLE DB Provider for SQL Server.
Was mich auch überrascht hat, war die gute Leitsung von Access.
Ich verwendet übrigens Delphi 7.1 und ADO-Version 2.8.
Comment