15 Types de tables MySQL
Manuel de Référence MySQL 4.1 : Version Française
. Le moteur de tables MyISAM . Tables assemblées MERGE ->Tables HEAP . Tables BDB ou BerkeleyDB . Tables ISAM
|
15.3 Tables HEAP
Les tables
HEAP
utilisent un index de hachage, et sont stockées en mémoire.
Elles sont très rapides, mais si MySQL crashe, vous perdrez toutes vos données.
Les tables
HEAP
sont très pratiques pour être des tables temporaires!
Les tables
HEAP
internes MySQL utilisent des hachages 100% dynamiques
sans zones de débordement. Il n'y a pas d'espace nécessaire pour des listes libres.
Les tables
HEAP
n'ont aussi aucun problème d'effacement et d'insertions,
qui sont le lot commun des tables de hachage :
mysql> CREATE TABLE test TYPE=HEAP SELECT ip,SUM(downloads) AS down -> FROM log_table GROUP BY ip; mysql> SELECT COUNT(ip),AVG(down) FROM test; mysql> DROP TABLE test;
|
Voici quelques conseils concernant les tables
HEAP
:
-
Vous devez toujours penser à spécifier le nombre maximal de lignes de la table
avec
MAX_ROWS
dans la commande de création
CREATE
pour vous assurer
de ne pas accidentellement consommer toute la mémoire.
-
Les index ne peuvent être utilisés qu'avec les opérateurs
=
et
<=>
(mais ils sont très rapides).
-
Les tables
HEAP
ne peuvent utiliser que des clés entières pour rechercher
une ligne. Par comparaisons, les tables
MyISAM
peuvent utiliser un préfixe de clé
pour trouver des lignes.
-
Les tables
HEAP
utilisent un format de ligne fixe.
-
HEAP
ne supporte pas les colonnes de type
BLOB
/
TEXT
.
-
HEAP
ne supporte pas les colonnes de type
AUTO_INCREMENT
.
-
Avant MySQL 4.0.2,
HEAP
ne supportait les index sur les valeurs
NULL
.
-
Vous pouvez utiliser des clés non-uniques avec les tables
HEAP
(ce qui n'est pas courant pour les tables de hachage).
-
Les tables
HEAP
sont partagées entre tous les clients (comme une autre table).
-
Vous ne pouvez pas recherche la prochaine ligne (c'est à dire, utiliser l'index
pour optimiser la clause
ORDER BY
).
-
Les données pour les tables
HEAP
sont alloués par petits blocs. Les
tables sont 100% dynamiques (en insertion). Aucune zone de débordement ou
d'espace de clé supplémentaire n'est nécessaire. Les lignes effacées sont placées
dans une liste, prêtes à être réutilisées.
-
Vous avez besoin de suffisamment de mémoire pour accepter toutes les tables
HEAP
que vous allez utiliser simultanément.
-
Pour libérer de la mémoire, vous devez exécuter la commande
DELETE FROM heap_table
,
TRUNCATE heap_table
ou
DROP TABLE heap_table
.
-
MySQL ne peut pas calculer approximativement le nombre de lignes entre deux
valeurs (ce qui est utilisé par l'optimiseur pour savoir quelle méthode utiliser).
Cela peut affecter certaines requêtes, si vous changez une table
MyISAM
en table
HEAP
.
-
Pour vous assurer que vous ne faîtes rien de trop téméraire, vous ne pouvez pas
créer de table
HEAP
plus grande que
max_heap_table_size
.
-
Si vous avez un index hash sur une table
HEAP
avec un haut degré de
duplication (de nombreux valeurs d'index contiennent la même valeur), les
modifications dans cette table peuvent affecter les valeurs des clés et
toutes les suppressions seront plus lentes. Le facteur de ralentissement
est proportionnel au degré de duplication (ou inversement proportionnel
à la cardinalité). Depuis la version 4.1, MySQL supporte les index
BTREE
les tables
HEAP
, que vous pouvez utiliser pour éviter le problème.
La mémoire nécessaire pour les tables
HEAP
sont :
SUM_OVER_ALL_KEYS(max_length_of_key + sizeof(char*) * 2) + ALIGN(length_of_row+1, sizeof(char*))
|
sizeof(char*)
vaut 4 sur les machines 32 bits et 8 sur une machine 64 bits.
|