Tipps & Tricks zu Abfragen

Auch zum Kapitel Abfragen noch ein paar allgemeine Tipps und Tricks.

Oft sind verschiedene Lösungen möglich, damit eine Abfrage das Gewünschte ausgibt. Meistens testet aber auch Access schon eigenständig, ob ein anderer Lösungsweg als der, den man gerade vorgegeben hat, schneller ist (in diesem Zusammenhang kann man über Begriffe wie „Rushmore“ oder „Showplan“ stoßen; darauf wird hier nicht näher eingegangen). Die wichtigste Voraussetzung für eine interne Optimierung ist, dass die Abfrage als Abfrage gespeichert ist. Ist beispielsweise die Datensatzquelle eines Formulars keine gespeicherte Abfrage, sondern statt dessen SQL, oder „bastelt“ man SQL per VBA zur Laufzeit, kann Access nicht intern optimieren. Vor dem Speichern sollte man eine Abfrage außerdem mindestens einmal ausführen. Dabei findet die Optimierung statt, die dann unsichtbar, zusammen mit der Abfrage gespeichert wird.

Je weniger Felder eine Abfrage zurückzugeben hat, desto schneller kann sie ausgeführt werden. Deswegen sollte man nach Möglichkeit nicht das Sternchen „*“ benutzen, sondern eben nur diejenigen Felder auswählen, die man wirklich braucht. Das gilt besonders, wenn die Abfage auch noch eine Sortierung enthält. Und da Computer mit Zahlen stets schneller arbeiten können als mit Text, sollte nach Möglichkeit eine Sortierung eher auf ein Zahlenfeld angewendet werden als auf Text. Darüber hinaus ist eine Sortierung im Allgemeinen schneller, wenn das zu sortierende Feld einen Schlüssel besitzt. Solche Einstellungen können natürlich nicht von der oben genannten internen Optimierung getroffen werden - das muss der Programmierer schon selbst machen.

Aktionsabfragen sollten unter VBA weder mit OpenQuery noch mit RunSQL ausgeführt werden, sondern mit CurrentDB.Execute.

Für Tabellen und Abfragen kann man in der Entwurfsansicht das  Eigenschaftenblatt einblenden. Die Einstellungen darin sind größtenteils mehr oder weniger sinnfrei oder werden nur in absolut exotischen Ausnahmefällen benötigt. Für Abfragen gibt es dann aber doch zwei sinnvolle Eigenschaften, wenngleich auch sie eher selten benötigt werden (Um sie zu erreichen, muss man erst im Abfrageentwurf in den grauen Hintergrundbereich klicken, damit im Eigenschaftenblatt oben „Auswahltyp: Abfrageeigenschaften“ angezeigt wird):

SELECT TOP 5 *
FROM tblOrte;

Manchmal interessieren nur einige der ersten Datensätze, und nicht etwa alle. Dazu kann man im Eigenschaftenblatt im Feld Spitzenwerte eingeben, wie viele Datensätze zurückgegeben werden sollen. Alternativ kann auch ein Prozentwert angegeben werden. Nutzt man Spitzenwerte, sollte man auch eine Sortierung nutzen, selbst wenn auf den ersten Blick die Datensätze korrekt sortiert zu sein scheinen. In aller Regel sortiert Access die Datensätze zwar anhand der Schlüssel, aber man sollte sich nicht blind darauf verlassen.

TRANSFORM Sum(lngStück)
SELECT datVerkaufsDatum
FROM qryVerkäufe
GROUP BY datVerkaufsDatum
PIVOT txtProdukt In(
    "Kaugummi", "Lutscher"
    );

Bei Kreuztabellenabfragen kommt es gelegentlich vor, dass sie sehr viele Spalten zurückgeben, obwohl nur wenige davon benötigt werden. Praktischerweise kann man vorgeben, welche Spalten zurückgegeben werden sollen. Um in unserem schon verwendeten Beispiel zu Kreuztabellenabfragen nur die Kaugummis und Lutscher angezeigt zu bekommen und keine der übrigen Produkte, tragen wir im Eigenschaftenblatt im Feld „Fixierte Spaltenüberschriften“ ein: "Kaugummi"; "Lutscher". Wenn wir die Abfrage jetzt ausführen, sind auch nur noch diese Produkte zu sehen.