Le moteur de stockage MEMORY crée des tables
      dont le contenu est stocké en mémoire. Avant MySQL 4.1, les
      tables MEMORY étaient appelées des tables
      HEAP. Depuis 4.1, HEAP est
      un synonyme de MEMORY, et
      MEMORY est le terme recommandé.
    
      Chaque table MEMORY est associée à un fichier
      sur le disque. Le fichier a le nom de la table, et pour extension
      .frm pour indiquer la définition de la
      table.
    
      Pour spécifier explicitement que vous voulez une table
      MEMORY, indiquez l'option
      ENGINE ou TYPE :
    
CREATE TABLE t (i INT) ENGINE = MEMORY; CREATE TABLE t (i INT) TYPE = HEAP;
      Les tables HEAP utilisent un index de hachage,
      et sont stockées en mémoire. Elles sont très rapides, mais si
      MySQL plante, vous perdrez toutes vos données. La table
      continuera d'exister car leur définition est stockée sur le
      serveur, dans le fichier .frm mais le contenu
      sera perdu au redémarrage du serveur. Les tables
      HEAP sont très pratiques pour être des tables
      temporaires.
    
      Voici un exemple qui montre comment créer, utiliser et détruire
      une table MEMORY :
    
mysql>CREATE TABLE test TYPE=MEMORY->SELECT ip,SUM(downloads) AS down->FROM log_table GROUP BY ip;mysql>SELECT COUNT(ip),AVG(down) FROM test;mysql>DROP TABLE test;
      Les tables MEMORY ont les caractéristiques
      suivantes :
    
          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.
        
          Les tables MEMORY peuvent avoir jusqu'à 32
          index par table, 16 colonnes par index, et un maximum de 500
          pour la tailles des clés.
        
          Avant MySQL 4.1, le moteur MEMORY
          n'implémentait que des index hash. Depuis MySQL 4.1, Les
          index hash sont le type par défaut, mais vous pouvez
          spécifier explicitement que l'index MEMORY
          doit être de type HASH ou
          BTREE en ajoutant la clause
          USING :
        
CREATE TABLE lookup
    (id INT, INDEX USING HASH (id))
    ENGINE = MEMORY;
CREATE TABLE lookup
    (id INT, INDEX USING BTREE (id))
    ENGINE = MEMORY;
          Les caractéristiques générales des hash et
          B-tree sont décrites dans la section
          Section 7.4.5, « Comment MySQL utilise les index ».
        
          Vous pouvez avoir des clés non-uniques dans une table
          MEMORY. (C'est une fonctionnalité rare
          pour les index hash).
        
          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.
        
          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.
        
          Les tables HEAP sont partagées entre tous
          les clients (comme une autre table).
        
          La caractéristique des tables MEMORY qui
          fait que les tables sont stockées en mémoire est partagée
          avec les tables internes que le serveur crée à la volée
          lors du traitement des requêtes. Cependant, les tables
          internes ont aussi la capacité d'être converties en tables
          disques automatiquement, si elles deviennent trop grandes. La
          taille limite est déterminée par la valeur de
          tmp_table_size.
        
          Les tables MEMORY ne peuvent pas être
          converties en tables disques. Pour vous assurer que vous ne
          faîtes rien de dangereux pour le serveur, vous pouvez
          utiliser la variable système
          max_heap_table_size pour imposer une taille
          maximale aux tables MEMORY. Pour des tables
          individuelles, vous pouvez utiliser l'option de table
          MAX_ROWS avec la commande CREATE
          TABLE.
        
          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.
        
          Si vous voulez remplir les tables MEMORY au
          lancement du serveur MySQL, vous pouvez utiliser l'option
          --init-file. Par exemple, vous pouvez mettre
          les commandes telles que INSERT INTO ...
          SELECT et LOAD DATA INFILE pour
          lire des données dans une source de données persistante. See
          Section 5.2.1, « Options de ligne de commande de mysqld ».
        
          Si vous utilisez la réplication, les tables
          MEMORY du maître se vident à
          l'extinction. Rependant, un esclave peut ne pas s'apercevoir
          que ces tables ont été vidées, et il risque de retourner
          des données invalides si vous l'utilisez. Depuis MySQL
          4.0.18, lorsqu'une table MEMORY est
          utilisée sur le maître, il émet une commande
          DELETE FROM automatiquement, pour
          synchroniser l'esclave et le maître. Notez que même avec
          cette stratégie, l'esclave aura des données obsolètes entre
          le moment où le maître s'éteint et celui où il est
          redémarré. Mais si vous utilisez l'option
          --init-file pour remplir la table
          MEMORY au lancement du serveur, elle
          s'assurera que cette intervalle est bien null.
        
          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*))
          ALIGN() représente un facteur d'arrondi,
          car la taille de la ligne doit faire exactement un multiple de
          la taille du pointeur de char.
          sizeof(char*) vaut 4 sur les machines 32
          bits et 8 sur une machine 64 bits.
        
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
