Hauptmenü

Untermenü

Advanced MySQL - Zwischenspeicherung

1. Der Sinn des Ganzen

Sehr oft gibt es in größeren Anwendungen die Situation, dass man an den unterschiedlichsten Stellen immer und immer wieder dieselben Abfragen an die Datenbank schickt. Und je nach dem, wie kompliziert die sind, kann das in eine fürchterliche Copy&Paste-Orgie ausarten.

Ein Beispiel

Nehmen wir einfach mal den guten alten Online-Shop. Da gibt den Warenkorb, den Merkzettel und natürlich die Bestellung. Und da man da normalerweise nur die Produkt-ID und die Anzahl in einer Session speichert, muss man sich alle Informationen jedes Mal aus der Datenbank zusammenklauben. Also jedes Mal ein SELECT ... FROM catalogue ... LEFT JOIN ... WHERE id = irgendwas. Und das nervt auf Dauer. Da kann eine Zwischenspeicherung von Abfragen schon verdammt hilfreich sein. Es gibt aber noch andere Gründe.

2. Geschwindigkeit

Je nach dem, was man einsetzt, kann eine Zwischenspeicherung einen ernormen Geschwindigkeitsvorteil bieten. Die Abfrage liegt ja bereits vor und muss nur noch mit ein paar Werten gefüllt werden.

3. Flexibilität

Wird etwas an einer Datenbank geändert, so muss unter Umständen nur die Zwischenspeicherung angepasst werden. Man erspart sich also die Mühe, noch mal alle Queries zu durchwühlen, die von dieser Änderung betroffen sind. Und wenn man es ganz geschickt anstellt, so muss man seinen Kollegen noch nicht mal etwas davon erzählen. Die bemerken das überhaupt nicht.

Außerdem muss sich dann nicht jeder Entwickler komplett in die Tiefen der Datenbankstruktur einarbeiten. Darum kümmern sich die Experten und der Rest greift auf die Zwischenspeicherungen zurück.

4. Sicherheit

Auch diesen Aspekt sollte man nicht unterschätzen. Denn bei Zwischenspeicherungen werden je nach Art Prüfungen durchgeführt. Teilweise geschieht das völlig automatisch durch MySQL. Damit können die Gefahren durch SQL-Injektions auf ein Minimum reduzieren.

5. Hä?

Tja, so isser der Kropff. Erst alle möglichen Vorteile aufzählen aber nicht erklären, um was es eigentlich geht. Gut, das ist auch nicht so ganz einfach bei der Vielzahl an Möglichkeiten. Ich versuche es mal abstrakt zu erklären. Eine Zwischenspeicherung muss man sich als einfaches SQL-Statement vorstellen.


# Abfrage yxz
SELECT
  x.a1x.a2y.b1y.b2y.b3z.c1
FROM
  x
INNER JOIN 
  y ON (y.pid x.idINNER JOIN 
  z ON (z.pid y.id)
WHERE x.a1 'irgendwas'
  AND y.b2 'irgendwas';

Diese Anweisung wird nun wie auch immer von MySQL angelegt. Und wenn man nun darauf zugreifen will, so steuert man das über den Namen der Zwischenspeicherung.


HOL ABFRAGE yxz;

6. Eine Ausnahme

... gibt es aber, nämlich die temporären Tabellen. Das ist allerdings ein ziemlicher Pillepups, darum gehe ich darauf auch nur sehr kurz ein. Erzeugt werden sie mit CREATE TEMPORARY TABLE.

Feinheiten

Eine temporäre Tabelle bleibt so lange erhalten, bis der Client die Verbindung trennt. Dann wird sie automatisch gelöscht. Gibt man bei ENGINE ein MEMORY an, so wird nur die Struktur auf Dateiebene angelegt, die Daten dagegen werden im Arbeitsspeicher gehalten.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt