
462 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
Wenn Sie bin¨are Zahlschl¨ussel komprimieren, benutzt MySQL die Pr¨afix-
Komprimierung. Das bedeutet, dass Sie nur dann einen Nutzen daraus ziehen,
wenn Sie Zahlen haben, die sich oft wiederholen. Pr¨afix-Kompression bedeutet,
das jeder Schl¨ussel ein zus¨atzliches Byte ben¨otigt, um darzustellen, wie viele Bytes
des vorherigen Schl¨ussels f¨ur den n¨achsten Schl¨ussel dieselben sind (beachten Sie,
dass der Zeiger auf die Zeile in der Reihenfolge ’hohes Byte zuerst’ direkt nach dem
Schl¨ussel gespeichert wird, um die Kompression zu verbessern). Das heißt, wenn Sie
viele gleiche Schl¨ussel auf zwei Zeilen hintereinander haben, werden alle folgenden
’gleichen’ Schl¨ussel ¨ublicherweise nur 2 Bytes in Anspruch nehmen (inklusive dem
Zeiger auf die Zeile). Vergleichen Sie das mit dem Normalfall, bei dem die folgenden
Schl¨ussel speicher platz fuer schl¨ussel + zeiger groesse beanspruchen (¨ublicherweise
4). Auf der anderen Seite verlieren Sie 1 Byte pro Schl¨ussel, wenn alle Schl¨ussel v¨ollig
unterschiedlich sind, falls der Schl¨ussel kein Schl¨ussel ist, der NULL-Werte haben kann
(in diesem Fall wird die komprimierte Schl¨ussell¨ange, die im selben Byte gespeichert
ist, benutzt, um zu kennzeichnen, ob ein Schl¨ussel NULL ist).
• Wenn Sie ein SELECT nach dem CREATE-Statement angeben, erzeugt MySQL neue Felder
f¨ur alle Elemente im SELECT. Beispiel:
mysql> CREATE TABLE test (a int not null auto_increment,
primary key (a), key(b))
TYPE=MyISAM SELECT b,c from test2;
Das erzeugt eine MyISAM-Tabelle mit drei Spalten a, b und c. Beachten Sie, dass die
Spalten des SELECT-Statements an die rechte Seite der Tabelle angeh¨angt werden, nicht
¨uberlapp end. Nehmen wir folgendes Beispiel:
mysql> select * from foo;
+---+
| n |
+---+
| 1 |
+---+
mysql> create table bar (m int) select n from foo;
Query OK, 1 row affected (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select * from bar;
+------+---+
| m | n |
+------+---+
| NULL | 1 |
+------+---+
1 row in set (0.00 sec)
F¨ur jede Zeile in Tabelle foo wird eine Zeile in bar mit den Werten von foo und
Vorgabewerten f¨ur die neuen Spalten eingef¨ugt.
CREATE TABLE ... SELECT erzeugt nicht automatisch irgend welche Indexe. Das wird
absichtlich gemacht, um den Befehl so flexibel wie m¨oglich zu machen. Wenn Sie Indexe
in der erzeugten Tabelle haben wollen, geben Sie diese vor dem SELECT-Statement an:
Comentarios a estos manuales