Tables assemblées MERGE
<<<
Tables HEAP Tables BDB ou BerkeleyDB
>>>

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.

<< Tables HEAP >>
Tables assemblées MERGE Types de tables MySQL Tables BDB ou BerkeleyDB