next up previous contents


5.3 HEAP: Immer auf Abruf

Die Heap-Tabellen werden direkt im Speicher verwaltet und sind daher äussert schnell im Zugriff, weil keine Zeit benötigt wird, um die Festplatte anzuwerfen. Wir müssen einzig sicherstellen, dass Heap-Tabellen nicht derart gross werden, dass unser Speicher überquillt. Bei den derzeitigen RAM-Preisen dürften HEAP-Tabellen rein finanziell kaum Grenzen gesetzt sein.

Image tip.png Ebenfalls sollten wir uns im Klaren sein, dass z.B. bei einem Stromunterbruch die Daten weg sind. Ok, wir wissen, worauf wir uns einlassen und legen eine Heap-Tabelle an:

mysql> create table speicher type=heap select * from akten;
Query OK, 2 rows affected (0.42 sec)
Records: 2  Duplicates: 0  Warnings: 0

Auch wenn das nicht direkt mit den Heap-Tabellen zusammenhängt, so sei an dieser Stelle darauf hingewiesen, dass wir mit dem obenstehenden Kommando auf äusserst einfache Weise eine Kopie der Tabelle 'akten' erstellt haben.

Zusammen mit 'drop table if exists speicher' können wir jederzeit eine Kopie der Tabelle 'akten' ziehen. Wozu das Ganze? Unter bestimmten Umständen können wir damit eine select-Abfrage beschleunigen, weil eine 1:1-Kopie schneller sein kann, als das Zusammentragen der Resultate quer über alle Index- und Tabellendateien. Die Heap-Tabellen haben derzeit aber einen praktischen Nachteil:

mysql> create table problem type=heap select * from seiten;
ERROR 1163: The used table type doesn't support BLOB/TEXT columns

Leider ist es noch nicht möglich, Text- und Blob-Felder in einer Heap-Tabelle zu speichern. Zugegeben, solche Felder können den Speicher relativ schnell zum Bersten bringen, aber angenommen in einer Adresskartei gibt es ein Notizfeld, und dieses wird nur hin und wieder benutzt, dann wäre eine Heap-Kopie doch eine angenehme Sache! Geht derzeit leider nicht; wir müssten jedes Feld im 'select'-Teil einzeln anführen, um wenigstens eine 'Rumpf'-Kopie (ohne Blob- und Text-Felder) fahren zu können. Immerhin, das Feature ist angekündigt.

Und damit wir uns richtig verstehen, eine Heap-Tabelle kann auch komplett neu aufgebaut werden:

mysql> create table speicher (Feld1 int) type=heap;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into speicher () values (1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from speicher;
+-------+
| Feld1 |
+-------+
|     1 |
+-------+
1 row in set (0.00 sec)



next up previous contents

Dokument als PDF anzeigen -- © 2003-06-15 by Urs Pfister, CH-8057 Zürich