MySQL 8: Mehr Performance, neue Funktionen, weniger Altlasten

Version 8 der relationalen Datenbank MySQL erhält Common Table Expressions und analytische Fensterfunktionen. Damit schließt sie zu MariaDB und PostgreSQL auf.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht
MySQL 8: Mehr Performance, neue Funktionen, weniger Altlasten
Lesezeit: 11 Min.
Von
  • Daniel Bößwetter
Inhaltsverzeichnis

MySQL bringt in Version 8 neuen Features, die die relationale Datenbank noch besser für den Unternehmenseinsatz machen. Vor allem bei der Erweiterung des implementierten SQL-Sprachumfangs, bei der Performance und bei den Konsistenzgarantien haben die Entwickler nachgezogen. Anhänger des MySQL-Forks MariaDB dürften allerdings wenig überrascht sein: Ein Teil der neuen Features gilt in ihrer Datenbank schon seit Längerem als stabil.

Während sich die Datenbankabfragesprache SQL in ihrer langen Geschichte beständig weiterentwickelt hat, hinkte die Implementierung neuerer Features in MySQL dem Standard deutlich hinterher. Eine lang vermisste Eigenschaft, die das Konkurrenzprodukt PostgreSQL bereits seit Version 8.4 aus dem Jahr 2009 kennt, sind die Common Table Expressions (CTEs). Sie erlauben es, komplexe Querys in überschaubare Teile zu zerlegen, die anschließend ähnlich wie Views anhand ihres Namens verwendet werden können (im Gegensatz zu einfachen Subquerys auch mehrfach).

WITH
german_sales AS
(SELECT * FROM sales WHERE country='DE'),
monthly_sales AS
(SELECT MONTH(created_at) mon, SUM(price) total_price
FROM german_sales group by 1)
SELECT MONTH(created_at), price/total_price
FROM german_sales JOIN monthly_sales ON mon=month(created_at);

Wie im oberen Listing zu sehen, werden die CTEs vor der Haupt-Query mit WITH definiert. Im Beispiel werden zunächst die Verkäufe in Deutschland aus einer imaginären Sales-Tabelle selektiert und dann in der zweiten CTE nach Monaten aggregiert. Die Haupt-Query berechnet den Anteil eines einzelnen Verkaufs am Umsatz des Gesamtmonats. Common Table Expressions reduzieren Redundanz und verringern die Fehleranfälligkeit. MariaDB implementiert sie seit Version 10.1 und seit 10.2 (im Mai 2017 erschienen) auch rekursiv.