MySQL 3.23 leutet eine neue Generation von MySQL ein, die nun gänzlich den
Kunderschuhen entwachsen ist. Das sieht man daran, daß MySQL nun
Eigenschaften besitzt, die man nirgendwo sonst finden kann: Welche SQL
Datenbank arbeitet schon mit vollen 64 Bit Breite und Datenbankgrößen, die
jenseits des physikalisch machbaren liegt ? Viel Wert wurde auch in die
weitere Entwicklung in Richtung ANSI SQL 92 gelegt. So werden nun viele
wichtige JOIN-Typen unterstützt. Noch mehr Performance durch die nun fast
beliebige Skalierbarkeit (Mehrere CPU´s, Multi Threads, 64 Bit...) machen
MySQL inzwischen einzigartig. Hier nun die wesentlichen Änderungen der neuen
Generation von MySQL 3.23 gegenüber den älteren Versionen:
- Volle Multi-Thread Unterstützung für Kernel-Threads. Das bedeutet, daß
MySQL mit der Zahl der CPU´s im System skaliert. Das macht sich
insbesondere bei komplexen Select-Statements auf Internet-Servern bemerkbar.
-
C, C++, Eiffel, Perl, PHP, Python und TCP
API´s sind verfügbar. Siehe
Kapitel
MySQL Client Werkzeuge
- MySQL ist auf beliebige Plattformen bereits portiert. Siehe Kapitel
Betriebssysteme für MySQL
- Viele Typen für Spalten: signed, unsigned integer, 1,2,3,4 und 8 Byte
lange Zahlen, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME,
DATETIME, TIMESTAMP, YEAR, SET und ENUM Typen. Siehe Kapitel
CREATE
- Sehr schnelle JOINS, da eine optimierte "one-sweep multi-join" Routine
implementiert ist.
- Volle Operatoren und Funktionsunterstützung im SELECT und
WHERE Teil
der Abfragen. Beispiel:
mysql> SELECT CONCAT(first_name, " ", last_name) FROM tbl_name
WHERE income/dependents > 10000 AND age > 30;
- SQL Funktionen sind in einer hochoptimierten Klassenbibliothek
implementiert und sollten so schnell wie das theoretische Limit der
Hardware sein. Normalerweise wird während und nach einer Abfrage kein
Speicher angefordert bzw. freigegeben.
- Unterstützung für SQL GROUP BY und ORDER BY Ausdrücke. Unterstützung
für Aggregatfunktionen, wie COUNT(), AVG(), STD(), SUM(), MAX() und MIN().
- Unterstützung für LEFT OUTER JOIN mit ANSI SQL und ODBC Syntax.
- Es dürfen Tabellen von verschiedenen Datenbanken in derselben Abfrage
erfolgen (Ab Version 3.22).
- Das Privilegien und Passwort System ist sehr flexibel und sicher. Es
erlaubt HOST basierte Überprüfug der Abfragen.
Verschlüsselung der Passworte
ist selbstverständlich.
- ODBC (Open Database Connectivity) für Windows 95/98/NT (mit Quellcode) ist
verfügbar. Volle (und mehr) Unterstützung des ODBC 2.5 Standards von
Microsoft. Access Anbindung möglich. Siehe Kapitel
ODBC Unterstützung
- Sehr schnelle B-TREE disk-tables mit Indexkompression
- 16 Indizes pro Tabelle sind erlaubt. Jeder Index kann aus bis zu 15
Spalten oder Teilen von Spalten bestehen. Die maximale Länge ist 256 Bytes,
kann aber durch neue Kompilation erweitert werden. Ein Index kann ein Prefix
eines CHAR oder VARCHAR Feldes benutzen.
- Feste und variable Einträge (Felder) ersparen viele Speicherplatz
- Speicherresidente Hashtabellen, die als tempöräre
Tabellen abgelegt
werden.
- Unterstützung für sehr große Datenbanken. Einige Datenbanken enthalten
50.000.000 Einträge.
- Alle Spalten besitzen Standard Werte. Der Befehl INSERT, der ein
Subset von Spalten in einer Tabelle einfügt, setzt Standard Werte ein, außer
wenn explizit angegeben.
- Unterstützung für GNU automake, autoconf und libtool für bessere
Portabilität
- Geschrieben in C und C++. Unterstützung von einer großen Anzahl von
Kompilern
- Thread basierte Speicheranforderung (malloc)
- Keine Speicher Lecks, entsprechend der Analyse mit
Purify
- MySQL enthält isamchk einem sehr schnellen Werkzeug für die
Tabellenüberprüfung, Optimierungen und Reparatur von Tabellen. Siehe Kapitel
MySQL installation
- Support für ISO-8859-1 Latin1 Format. Alle Vergleiche für normale
Spalten von Strings sind case sensitiv.
- Die Sortierung von Elementen erfolgt nach dem ISO-8859-1 Latin1
Set. Es ist möglich, dieses im Quellcode zu verändern, um neue
Sortierungsreichenfolgen festzulegen. Um ein Beispiel für fortgeschrittene
Sortierung zu sehen, sollte man sich einmal die Tschechische Sortierung
(Czech) anschauen. MySQL unterstützt verschiedene Character-Sets,
die bei der Kompilierung angegeben werden können.
- Aliases auf Tabellen und Spalten entsprechen dem SQL92
Standard
- DELETE, INSERT, REPLACE und UPDATE geben als Rückgabewert aus,
wieviele Reihen von der Änderung betroffen waren.
- Funktionsnamen dürfen nicht mit einem Tabellen oder Spaltennamen
kollidieren. Z.B. ist ABS eine gültiger Spaltenname. Die einzige
Beschränkung ist, daß keine Leerzeichen zwischen dem Funktionsnamen und dem
"(", das folgt, sein dürfen. Siehe Kapitel
Ist MySQL empfindlich bei reservierten Worten
- Alle MySQL Programme (Kommandozeile) können mit den Optionen
--help und -? aufgerufen werden. Es wird eine Hilfe
ausgegeben.
- Der MySQL Server kann Fehlermeldungen in vielen verschiedenen
Sprachen an den Client übergeben. Siehe Kapitel
Welche Sprachen sind von MySQL unterstützt ?
- Clients, die an dem MySQL Server angebunden sind, können über
TCP/IP Verbindungen, UNIX Sockets, oder named pipes unter Windows
NT den Server kontaktieren.
- Das MySQL spezifische Kommando SHOW kann dazu
verwendet werden, um Informationen über die Datenbanken, Tabellen und
Indizes abzufragen. Der Befehl EXPLAIN, siehe Kapitel
EXPLAIN dient dazu, zu bestimmen,
wie der Optimizer eine Abfrage durchführt (DEBUGGING)
- Ein Hauptunterschied zwischen Version 3.23 und den älteren Versionen ist,
daß 3.23 eine neue, viel schnellere ISAM Library (MyISAM) besitzt, die an
SQL besser angepasst ist.
- BIG File Support für 64 Bit Architekturen. Wer einmal Video
digitalisiert hat, der wird festgestellt haben, daß bei einer Filegröße von
2 Gigabyte bzw. 4 Gigabyte als Ausnahme (je nach Filesystem) Schluß ist.
Bisher mußten große Datenbankserver entweder mit einem 64 Bit Filesystem
ausgestattet sein, oder die Datenbank hat direkt auf das RAW-DEVICE (meist
SCSI) geschrieben, indem es quasi ohne Formatierung direkt in den SCSI
Controller geschrieben hat. SGI IRIX, SOLARIS 2.7 können nun von Hause aus
viel größere Dateien schreiben. LINUX 2.0/2.2 auf DEC ALPHA und LINUX 2.2
auf (ULTRA) SPARC, sowie NetBSD für DEC ALPHA können nun unter Verwendung
von GFS (GIGA FILESYSTEM) ebenfalls riesige Files verwalten. MySQL
unterstützt nun diese Eigenschaften. Hierzu muß MySQL mit dem GCC Compiler
für 64 Bit Architekture mit kleinen Änderungen im Quellcode neu übersetzt
werden. Für die Dateigröße können allerdings nur 63 Bit verwendet
werden...also nur halb so viel ;-((
- Erweiterte Tabellen Typen
- Es können im RAM sog. HEAP Tabellen angelegt werden, die extrem
schnell arbeiten (ähnlich RAMDISK)
- Neuer Befehl LOAD_FILE(filename), um sich nur die Inhaltsangabe
(Spaltennamen) einer Tabelle anzuschauen.
- Neuer Operator <=>, der genauso, wie = arbeitet, allerdings
TRUE zurückliefert, wenn beide Argumente NULL sind, also eine Art
XOR Verknüpfung
- Unter ODBC 3.0 gibt es nun die Funktion EXTRACT(interval from
datetime).
- Volle Unterstützung von ODBC 2.5 (Siehe Microsoft)
- REPLACE ist nun schneller
- LIKE kann nun kleine Unterschiede zwischen Buchstaben, wie é und e als
gleich behandeln. Das bedeutet, daß TRUE zurückgegeben wird.
- LIKE kann nun mit SHOW STATUS kombiniert werden
- SHOW STATUS gibt nun eine Spalte mit Privilegien aus (privilege)
- SHOW INDEX gibt die Spalten packed und comment aus
- Tabellen können nun zur besseren Dokumentation Kommentare enthalten (CREATE TABLE ... COMMENT
"Kommentar"
- CREATE TABLE table_name (col int not null UNIQUE) ist nun erlaubt
- Neue Syntax: CREATE TABLE SELECT
- Neue Syntax: CREATE TABLE IF NOT EXISTS
- Anlegen einer Spalte mit CHAR(0) ist nun erlaubt
- Neue Syntax: DATE_FORMAT() erfordert nun ein % vor jedem Formatbuchstaben
- DELAYED ist nun ein reserviertes Wort
- Eine Beispielprozedur ist hinzugefügt worden: Siehe hierzu auch
Sql_analyse.c . Diese Prozedur wird die Daten in Ihrer Abfrage beschreiben.
Beispiel zur Anwendung:
SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max elements,[max
memory]])
Diese Prozedur dient als Beispiel für die Implementierung eigener
Prozeduren,
- BINARY CAST forciert, das Strings case sensitive verglichen werden
- Neue Option --skip-show-databases in mysqld
- Die Überprüfung, ob eine Reihe sich verändert hat, funktioniert nun
auch mit BLOB/TEXT Spalten
- INNER JOIN ist nun erlaubt (INNER ist nun ein reserviertes Wort)
- Die Zugriffrechte können sich nun auch neben
Hostnamen auch auf Netzmasken
(Subnetze) beziehen.
- Bei einem Vergleich von NOT NULL DATE/DATETIME Spalten, die IS NULL
sind, wird nun mit 0 verglichen, um einige Differenzen mit ODBC
auszuschalten.
- NULL IN (...) gibt nun NULL anstelle von 0 zurück. Dies dient dazu,
daß null_column NOT IN (...) nicht auf NULL Werte zutrifft.
- Fehlerkorrektur bei dem Speichern von Fließkommawerten in TIME Spalten
- TIME Strings werden nun präziser analysiert:
[[DAYS] [H]H:]MM:]SS[.fraction]
[[[[[H]H]H]H]MM]SS[.fraction]
Der zweite Teil des fraction Abschnittes wird erkannt und ignoriert
- LOAD DATA INFILE kann nun auch mit LOW_PRIORITY versehen werden
- Der Standard INDEX Name benutzt nun dieselbe Groß/Keinschreibung, wie
der Spaltenname
- Zahl der maximalen Verbindungen wird auf 100 festgelegt
- Größerer Puffer bei LOAD DATA INFILE (schneller)
- DECIMAL(x,y) arbeitet nun entsprechend dem ANSI SQL Standard
- UDF Aggregatfunktionen wurden hinzugefügt:
LAST_INSERT_ID() wird nun bei INSERT INTO ... SELECT geupdatet.
- JOINS sind nun schneller
- SELECT DISTINCT ist nun viel schneller, da es die neue UNIQUE Funktion
in MyISAM verwendet. Die Ausgabe bei DISTINCT wird nun nich mehr sortiert
- Temporäre RAM HEAP Tabellen werden nun automatisch in MyIASM Tabellen
auf die Festplatte ausgelagert, falls nötig. table is full error sollte
somit nicht mehr erscheinen....
- Alle C Client API Makro's sind nun Funktionen, damit die shared
libraries zuverlässiger arbeiten. Daher ist z.B. der Aufruf einer Funktion:
call mysql_num_fields() bei einem MySQL Feld nicht mehr erlaubt.
Stattdessen muß das Makro mysql_field_count() verwendet werden.
- Benutzung des LIBWRAP nun möglich zur Identifizierung von CLients
- AUTO_INCREMENT setzt die Spalten nun automatisch auf NOT NULL
- Show NULL ist nun der Standardwert für AUTO_INCREMENT Spalten
- Neues Statement: SQL_BIG_RESULT . SQL_SMALL_RESULT ist nun Standard
- Shared Lib nun im RPM Format verfügbar
- Option --enable-large-files ist nun bei configure möglich
- Neue Optionen bei CREATE TABLE: PACK_KEYS und
CHECKSUM
- Neue Option bei mysqld: --default-table-type