Optimieren von Microsoft Access bei verwendung von ODBC-Datenquellen

Erweitert: Erfordert Expertenkenntnisse für Codierung, Interoperabilität und Mehrbenutzerfähigkeiten.

Dieser Artikel gilt nur für eine Microsoft Access-Datenbank (.mdb oder .accdb).

Zusammenfassung

In diesem Artikel werden mehrere Tipps zum Verbessern der Leistung beim Zugriff auf Daten aus einer ODBC-Datenquelle beschrieben.

Weitere Informationen

Verwenden Sie die folgenden Tipps, um die Leistung mit ODBC-Datenquellen zu verbessern:

  • Schränken Sie die Datenmenge ein, die Sie vom Server anfordern. Fordern Sie nicht mehr Daten an, als Sie benötigen. Verwenden Sie Abfragen, um nur die Felder und Zeilen auszuwählen, die Sie benötigen.

  • Verwenden Sie nur die Funktionalität, die Sie benötigen. Momentaufnahmen sind weniger leistungsfähig als Dynasets und können nicht aktualisiert werden. Momentaufnahmen können jedoch schneller sein, insbesondere bei kleinen Recordsets ohne Memo- oder OLE-Objektfelder.

  • Erstellen Sie verknüpfte (angefügte) Tabellen für den Zugriff auf Serverdaten. Vermeiden Sie "direkten" Serverzugriff (d. a. öffnen Sie keine Remotedatenbanken, und führen Sie keine Abfragen für sie aus). Erstellen Sie stattdessen angefügte Tabellen oder Pass-Through-Abfragen.

  • Entwerfen Sie Listenfelder und Kombinationsfelder mit Bedacht. In einem Formular erfordert jedes Listenfeld, jedes Kombinationsfeld, jedes Unterformular und jedes Steuerelement, das eine Summe enthält, eine separate Abfrage. Bei lokalen Daten kann die Leistung angemessen sein. Bei Remotedaten kann es jedoch zu langen Verzögerungen kommen, wenn Sie ein Formular öffnen, da jede Abfrage an den Server gesendet werden muss und eine Antwort zurückgegeben werden muss, bevor das Formular geöffnet werden kann.

  • Vermeiden Sie große Kombinationsfelder. Das Einschließen eines Kombinationsfelds mit Hunderten oder sogar Tausenden von Auswahlmöglichkeiten, die auf einer lokalen Tabelle basieren, kann zu einer akzeptablen Antwortzeit führen, insbesondere wenn Sie einen geeigneten Index für die lokale Tabelle definieren. Für eine Remotetabelle führt ein solches Kombinationsfeld jedoch zu einer trägen Leistung, da es Server- und Netzwerkressourcen leert, während es Daten abruft, um die Liste zu füllen. Es empfiehlt sich, die Anzahl der Zeilen zu begrenzen, die an das Kombinationsfeld zurückgegeben werden, wenn Sie mit Remotedaten arbeiten. Sie können die Daten auch in kleinere Kombinationsfelder aufteilen (unter Berücksichtigung des obigen Tipps).

  • Verwenden Sie den Befehl Suchen nur für kleinere Recordsets. Die Microsoft Jet-Datenbank-Engine optimiert den Befehl Suchen, um gut für lokale Recordsets nahezu jeder Größe und für Remoterecordsets mit angemessener Größe zu funktionieren. Wenn Sie jedoch über große Remoterecordsets (Tausende von Datensätzen oder mehr) verfügen, sollten Sie stattdessen einen Filter oder eine Abfrage erstellen und auch auf Einschränkungen achten, die Ihr Server verarbeiten kann.

  • Stellen Sie sicher, dass Abfragen zur Verarbeitung an den Server gesendet werden. Der wichtigste Faktor bei der Abfrageleistung für Remotedaten besteht darin, sicherzustellen, dass ihr Server so viele Abfragen wie möglich ausführt. Die Microsoft Jet-Datenbank-Engine versucht, die gesamte Abfrage an Ihren Server zu senden, wertet jedoch alle Abfrageklauseln und -ausdrücke lokal aus, die im Allgemeinen nicht von Servern oder ihrem jeweiligen Server unterstützt werden. Funktionen, die von Servern im Allgemeinen nicht unterstützt werden, umfassen Folgendes:

  • Vorgänge, die nicht in einer einzelnen SQL-Anweisung ausgedrückt werden können. Diese Situation kann auftreten, wenn Sie eine Abfrage als Eingabe für eine andere Abfrage verwenden oder wenn die FROM-Klausel Ihrer Abfrage eine Totals- oder DISTINCT-Abfrage enthält. Häufig können Sie Ihre Abfragen neu anordnen, um Summen nach allen anderen Vorgängen zu berechnen.

    • Vorgänge, bei denen es sich um spezifische Erweiterungen der Microsoft Jet-Datenbank-Engine für SQL handelt, z. B. Kreuztabellenabfragen, TOP-Abfragen und Berichte mit mehreren Gruppierungsebenen und Summen. Beachten Sie, dass einfache Kreuztabellenabfragen an Server gesendet werden können.
    • Ausdrücke, die Microsoft Access-spezifische Operatoren oder Funktionen enthalten. Die Finanzfunktionen und statistischen Aggregate von Microsoft Access verfügen über keine Serveräquivalente.
    • Benutzerdefinierte Visual Basic für Anwendungsfunktionen, die Remotespalten als Argumente verwenden. Diese Funktionen sind nicht auf dem Server vorhanden, müssen aber Remotespaltendaten verarbeiten. Wenn jedoch eine benutzerdefinierte Funktion einen einzelnen Wert zurückgibt und nicht auf eine Remotespalte verweist, wird die Funktion lokal ausgewertet, und ihr Wert wird zur Verarbeitung an den Server gesendet.
    • Kombinieren von Text und numerischen Datentypen in Operatoren oder UNION-Abfrageausgaben. Den meisten Servern fehlt die Datentyp-Nachsichtigkeit von Microsoft Access. Verwenden Sie daher ggf. explizite Konvertierungsfunktionen.
    • Heterogene Verknüpfungen zwischen lokalen Tabellen und Remotetabellen oder zwischen Remotetabellen in verschiedenen ODBC-Datenquellen. Verknüpfungen zwischen kleinen lokalen Tabellen und großen Remotetabellen, bei denen die Joinspalte indiziert ist, können zu einem Remoteindexjoin führen. In einem Remoteindexjoin wird eine Abfrage für jede Zeile in der lokalen Tabelle an den Server gesendet, und nur die verknüpften Zeilen werden zurückgegeben.
    • Nicht remotefähige Ausdrücke oder Ausdrücke, die nicht remote gesendet werden können, da sie vom Server nicht ausgewertet werden können. Nicht remoteable Ausgabeausdrücke (die in der SELECT-Klausel) erzwingen keine lokale Auswertung Ihrer Abfrage, es sei denn, sie treten in einer Totals-Abfrage, einer DISTINCT-Abfrage oder einer UNION-Abfrage auf. Nicht remotefähige Ausdrücke in anderen Klauseln (WHERE, ORDER BY, GROUP BY, HAVING usw.) erzwingen, dass mindestens ein Teil der Abfrage lokal ausgewertet wird.
  • Server unterscheiden sich in einigen Bereichen der unterstützten Funktionalität. Wenn Sie eine Remotetabelle anfügen, fragt die Microsoft Jet-Datenbank-Engine den ODBC-Treiber nach seinen Funktionen ab. Wenn die erforderliche Funktionalität vom Treiber und vom Server unterstützt wird, sendet die Microsoft Jet-Datenbank-Engine den Vorgang zur Verarbeitung an den Server. Andernfalls führt die Microsoft Jet-Datenbank-Engine den Vorgang lokal aus. Zu den Bereichen der unterschiedlichen Unterstützung gehören (aber nicht beschränkt auf) die folgenden:

    • Äußere Verknüpfungen. Beachten Sie, dass die Microsoft Jet-Datenbank-Engine nicht mehrere äußere Joins an einen Server sendet, obwohl viele innere Joins einen einzelnen äußeren Join begleiten können.
    • Numerische, Zeichenfolgen- und Datums-/Uhrzeitfunktionen wie Log(), Mid$(), DatePart() usw.
    • Konvertierungsfunktionen wie CInt(), CStr(), CVDate() usw.