Hallo,
ich greife aus einem Delphi-Programm über "Microsoft OLE DB Provider for ODBC Drivers" und den ODBC-Treiber von MySQL auf eine MySQL-Datenbank zu. Befehle mit Aggregat-Fubktionen (z.B. SUM) laufen dabei sehr langsam. Ich habe daher im SQL-Log von MySQL die Befehle protokollieren lassen und festgestellt, dass bei einem Befehl der Art
select SUM(Preis) as Gesamtpreis from Orders where Client_ID=4711
zusätzlich ein Befehl
select * from Orders
im SQL-Log auftritt, der so nie im Programm zu finden ist. Wenn viele Daten vorhanden sind, ist das natürlich tödlich.
Ich kann das nur so deuten, dass der ODBC-Treiber oder der OLE-Treiber den SUM-Befehl so "interpretiert", dass zuerst alle Daten geholt werden (daher "select * from Orders") und diese dann durchforstet werden, um bei passendem Wert von Client_ID die Daten in die Summierung aufzunehmen.
Ich habe dann den gleichen Befehl im guten alten "SQL-Explorer" von Borland eingegeben (wobei ich direkt über ODBC, d.h. ohne den OLD DB-Treiber), dann tauchte im SQL-Log kein zusätzliches "select * from Orders" auf. Das lässt mich vermuten, dass die Ursache im "Microsoft OLE DB Provider for ODBC Drivers" liegt. Hat jemand damit schon mal Erfahrung damit gesammelt? Gibt es eine Lösung für das Problem?
Da das Programm auf mehrere Datenbanken über ADO zugreifen können soll, ist eine Abkehr vom OLE DB-Treiber kaum möglich.
ich greife aus einem Delphi-Programm über "Microsoft OLE DB Provider for ODBC Drivers" und den ODBC-Treiber von MySQL auf eine MySQL-Datenbank zu. Befehle mit Aggregat-Fubktionen (z.B. SUM) laufen dabei sehr langsam. Ich habe daher im SQL-Log von MySQL die Befehle protokollieren lassen und festgestellt, dass bei einem Befehl der Art
select SUM(Preis) as Gesamtpreis from Orders where Client_ID=4711
zusätzlich ein Befehl
select * from Orders
im SQL-Log auftritt, der so nie im Programm zu finden ist. Wenn viele Daten vorhanden sind, ist das natürlich tödlich.
Ich kann das nur so deuten, dass der ODBC-Treiber oder der OLE-Treiber den SUM-Befehl so "interpretiert", dass zuerst alle Daten geholt werden (daher "select * from Orders") und diese dann durchforstet werden, um bei passendem Wert von Client_ID die Daten in die Summierung aufzunehmen.
Ich habe dann den gleichen Befehl im guten alten "SQL-Explorer" von Borland eingegeben (wobei ich direkt über ODBC, d.h. ohne den OLD DB-Treiber), dann tauchte im SQL-Log kein zusätzliches "select * from Orders" auf. Das lässt mich vermuten, dass die Ursache im "Microsoft OLE DB Provider for ODBC Drivers" liegt. Hat jemand damit schon mal Erfahrung damit gesammelt? Gibt es eine Lösung für das Problem?
Da das Programm auf mehrere Datenbanken über ADO zugreifen können soll, ist eine Abkehr vom OLE DB-Treiber kaum möglich.
Comment