Der Query-Cache ist ein Speicherbereich im Datenbankserver, der das Ergebnis einer SQL-Abfrage komplett zwischenspeichert. Wird exakt dieselbe Abfrage erneut ausgeführt, liefert der Server das Ergebnis direkt aus dem Cache, ohne die Tabellen erneut zu lesen und die Abfrage neu zu berechnen.
So funktioniert der Query-Cache
Der Server bildet aus dem Abfragetext einen Hash und vergleicht ihn mit den gespeicherten Einträgen. Entscheidend ist: Der Text muss bytegenau übereinstimmen. Bereits ein anderes Leerzeichen, eine andere Groß-/Kleinschreibung oder ein anderer Kommentar erzeugt einen neuen Cache-Eintrag. Ändert sich eine der beteiligten Tabellen (INSERT, UPDATE, DELETE), wird der komplette Cache für diese Tabelle invalidiert — deshalb lohnt sich der Query-Cache vor allem bei leseintensiven Workloads mit vielen identischen Abfragen.
MySQL und MariaDB: unterschiedliche Wege
- MySQL: Der Query-Cache wurde bereits in MySQL 5.6 deaktiviert und in MySQL 8.0 entfernt. Grund: Bei hoher Schreiblast wurde der Cache-Invalidierungs-Overhead größer als der Nutzen, und der globale Sperrmechanismus (Mutex) wurde zum Flaschenhals.
- MariaDB: Der Query-Cache ist weiterhin vorhanden und über
query_cache_size,query_cache_typeundquery_cache_limitkonfigurierbar. Viele Distributionen deaktivieren ihn jedoch standardmäßig.
Abgrenzung zu anderen Speicherschichten
Der Query-Cache speichert fertige Ergebnisse, der Buffer Pool dagegen rohe Daten- und Indexseiten. Beide entlasten die Festplatte, wirken aber auf unterschiedlichen Ebenen: Der Buffer Pool beschleunigt jeden Zugriff auf häufig genutzte Seiten, der Query-Cache nur exakt wiederholte Abfragen. Eine Materialisierung dauerhafter Ergebnisse übernimmt die Materialisierte Sicht.
Praxis-Tipp
Für moderne OLTP-Systeme ist der Buffer Pool die wichtigste Stellschraube. Ein Query-Cache bringt nur dann Vorteile, wenn die Anwendung wirklich viele identische Leseabfragen stellt — im Zweifel lieber das Anwendungs-Caching auf Ebene des Webservers oder einer In-Memory-Schicht nutzen.
Verwandte Grundlagen: Buffer Pool, Hash-Index, Query-Optimierung, In-Memory-Datenbank.