Tipps & Tricks zu Abfragen

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

Abfrageoptimierung

Oft sind verschiedene Lösungen möglich, damit eine Abfrage das gewünschte Ergebnis liefert. Meistens testet Access aber bereits im Hintergrund selbständig, ob ein anderer Lösungsweg als der gerade angegebene schneller ist (wer sich näher damit befasst, kann über Begriffe wie "Rushmore" oder "Showplan" stolpern, auf die hier nicht näher eingegangen werden soll). Die wichtigste Voraussetzung für die interne Optimierung ist, dass die Abfrage tatsächlich als Abfrage gespeichert wird. Man kann zum Beispiel als Datensatzquelle eines Formulars anstelle einer Abfrage auch direkt SQL verwenden, oder man kann SQL zur Laufzeit mit VBA "basteln". Access kann so etwas intern nicht optimieren. Außerdem sollte man eine Abfrage vor dem Speichern mindestens einmal ausführen. Dabei findet die Optimierung statt und wird dauerhaft unsichtbar zusammen mit der Abfrage gespeichert.

Je weniger Felder eine Abfrage zurückgeben muss, desto schneller kann sie ausgeführt werden. Deswegen sollte man nach Möglichkeit nicht das Sternchen „*“ benutzen, sondern nur diejenigen Felder auswählen, die man wirklich braucht. Das gilt insbesondere, wenn die Abfage auch noch eine Sortierung enthält. Und da Computer mit Zahlen stets schneller arbeiten können als mit Text, sollte eine Sortierung nach Möglichkeit auf ein Zahlenfeld und nicht auf Text angewendet werden. 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 vorgenommen werden - das muss der Programmierer schon selbst tun.

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

Abfrageeigenschaften

Für Tabellen und Abfragen kann man in der Entwurfsansicht das Eigenschaftenblatt einblenden. Während dies für Tabellen mehr oder weniger sinnfrei ist, gibt es für Abfragen zwei nützliche Eigenschaften, wenngleich eher selten benötigt. Um sie zu erreichen, muss man erst im oberen Teil des Abfrageentwurfs in den grau hinterlegten Hintergrundbereich klicken, damit im Eigenschaftenblatt oben „Auswahltyp: Abfrageeigenschaften“ angezeigt wird):

SELECT TOP 5 *
FROM tblOrte;

Manchmal sind nicht alle, sondern nur einige der ersten Datensätzevon Interesse, Zu diesem Zweck kann man im Eigenschaftenblatt im Feld Spitzenwerte eingeben, wie viele Datensätze zurückgegeben werden sollen. Alternativ kann auch ein Prozentwert angegeben werden. Wenn man Spitzenwerte verwendet, 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 abgeben, welche Spalten zurückgegeben werden sollen. Um in unserem schon verwendeten Beispiel zu Kreuztabellenabfragen nur Kaugummis und Lutscher angezeigt zu bekommen und keine der übrigen Produkte, gegen wir im Eigenschaftenblatt im Feld „Fixierte Spaltenüberschriften“ ein: "Kaugummi"; "Lutscher". Wenn wir die Abfrage anschließend ausführen, sind auch nur noch diese Produkte zu sehen.