MySQL wieder ein Stückchen grösser
Gut eineinhalb Jahre hat es gedauert, bis aus der ersten Alpha-Version von MySQL 4.1 eine stabile Datenbanksoftware für den Feldeinsatz wurde. Seit der letzten Oktoberwoche ist es nun soweit: MySQL 4.1.7 steht zum Download bereit.
Wie bei jedem Major-Release sind wieder etliche neue Funktionen hinzugekommen, die langsam, aber sicher die Datenbank aus dem hohen Norden an die Konkurrenz wie PostgreSQL oder Microsofts SQL-Server heranführen. Da wären zum Beispiel Subselects oder kompletter Unicode-Support. Es wurden aber auch etliche bereits vorhandene Funktionen überarbeitet und verbessert wie die Replikation oder die HEAP-Storage-Engine, welche nun Btree-Indizes unterstützt.
Abfragen-Polonaise
Subqueries gehören wie Views zu den von vielen Entwicklern heiss ersehnten Funktionen, da es mit ihnen möglich ist, die Applikationslogik vermehrt auf den Datenbankserver zu verschieben. Während man sich für Views noch bis MySQL 5.0 gedulden muss, findet man in MySQL 4.1 Subqueries (Unter-Abfragen innerhalb einer anderen Abfrage) und Derived Tables («Unnamed views» – Subquery innerhalb der FROM-Clause). Neben einigen MySQL-spezifischen Funktionen wurden sämtliche Operationen implementiert, welche vom SQL-Standard gefordert werden. Mit den Subqueries ist es nun möglich, Operationen, welche früher entweder mit Hilfe einer Programmiersprache oder einem komplexen Konglomerat aus JOINs und UNIONs gelöst wurden, mit einer oder mehreren Subqueries auszuführen, was in den meisten Fällen nicht nur einfacher, sondern auch effektiver ist.
SELECT column1, column2 FROM
table1 WHERE colum3 = (SELECT
MIN(column1) FROM table2);
Diese Operation liess sich bis anhin nicht mit einem JOIN lösen, sondern musste ausprogrammiert werden, indem man zuerst das Resultat der Subquery
SELECT MIN(column1) FROM table2;
angefordert und dieses dann in die eigentliche Query eingesetzt hat:
SELECT column1, column2 FROM
table1 WHERE colum3 = '4';
Neben den klassischen Subqueries ermöglicht MySQL nun auch Subqueries in den FROM-Clauses, was man auch als Derived Tables oder Unnamed Views bezeichnet. Damit ist es zum Beispiel möglich, Operationen auf vorher ermittelte Resultate auszuführen. Wenn man beispielsweise Summen bildet und von diesen nachher den Durchschnitt ermitteln möchte, war das mit älteren Versionen als MySQL 4.1 nicht in einem Rutsch zu erledigen:
SELECT AVG(SUM(column1)) FROM
table1 GROUP BY column1;
Dies lässt sich nun mit einem Unnamed View realisieren:
SELECT AVG(sum) FROM (SELECT
SUM(table1.column1) AS sum FROM
table1 GROUP BY table1.column1)
AS table1;