Ein Beispiel zur Verdeutlichung:
Ich habe eine Tabelle (Auszug)
Kundennr, Name, Vorname, Adresse, PLZ, Ort
Die Tabelle liegt auf dem MySQL-Server und enthält ca 6000 Datensätze.
Öffne ich nun aus Access heraus einfach nur die Tabelle, dann dauert das 5-6 Sekunden, und sie ist da. Soweit alles ok.
Wenn ich nun eine Acess-Abrage laufen lasse, die alle Daten anzeigt mit PLZ > 50000, dann dauert das etwa 5 Minuten. Auch wenn ich die Abfrage in Access als Pass-Through definiert habe.
Es werden ca 5-6 MB Daten übertragen.
Der MySQL-Server langweilt sich derweil. Und auch die Auslastung lokal ändert sich nicht. Das Problem liegt also einzig und allein an der übertragenen Menge von Daten, die bei einer Abfrage ungleich höher ist, als wenn ich nur die Tabelle öffne. Und das, obwohl in der Tabelle etwa das doppelte an Daten steht, als die Abfrage hervorbringt.
Was sind denn das für Daten, die Access da überträgt? Ich könnte mir zwei Dinge vorstellen:
- Access fordert die komplette Tabelle an (dauert 5-6 Sekunden), führt dann die Abfrage lokal aus und zeigt das Ergebnis an.
- Access schickt das SQL-Statement an MySQL, der Server führt die Abfrage aus und schickt das Ergebnis zurück (sollte ja nicht länger dauern, als die komplette Tabelle zu übertragen…) So funktioniert das ja offensichtlich bei „Pass-Through“
Beides scheint aber nicht zuzutreffen, denn sonst wäre ja kein Geschwindigkeitsunterschied zu verzeichen zwischen dem Öffnen einer Tabelle und dem Öffnen einer Abfrage.
Weitere Möglichkeit: Access fordert die komplette Tabelle an, prüft, ob das SQL-Statement auf die erste Zeile zutrifft, fordert wieder die komplette Tabelle an, prüft die zweite Zeile, usw…
Woher kommt also der ganze Traffic über ISDN?
Danke für weitere Hinweise,
Philip.