web-dev-qa-db-fra.com

Les tables sont-elles créées avec "CREATE TEMPORARY TABLE" en mémoire ou sur disque?

Dans MySQL, lorsque vous créez une table temporaire, par exemple, CREATE TEMPORARY TABLE ..., cette table est-elle créée et conservée en mémoire ou sur le disque?

J'ai lu les documents et les ai trouvés sur Google et je n'ai pas trouvé de réponse.

25
Nate Weiner

Cela dépend du moteur que vous spécifiez. Par défaut, les données de la table seront stockées sur disque. Si vous spécifiez le moteur MEMORY, les données ne seront stockées qu'en mémoire.

Il devrait être possible de trouver réellement les fichiers créés dans le système de fichiers lors de la création des tables temporaires. Après avoir exécuté les commandes suivantes:

CREATE TABLE test.table_myisam (x int) ENGINE=MyISAM;
CREATE TABLE test.table_memory (x int) ENGINE=MEMORY;
CREATE TEMPORARY TABLE test.temp_table_myisam (x int) ENGINE=MyISAM;
CREATE TEMPORARY TABLE test.temp_table_memory (x int) ENGINE=MEMORY;

J'ai ensuite vérifié le répertoire: C:\ProgramData\MySQL\MySQL Server 5.5\data\test (sous Windows) et les fichiers présents étaient:

 table_innodb.frm # Définition de la table. 
 table_innodb.MYD # Fichier de données de la table MyISAM. 
 table_innodb.MYI # Fichier d'index de la table MyISAM. 
 
 table_memory.frm # Aucun fichier MYD ou MYI pour le moteur MEMORY. 

Les tables temporaires sont stockées dans C:\Windows\Temp et ont des noms inhabituels, mais en interne, les données sont stockées de la même manière.

 # sql9a0_7_d.frm # Il s'agit de la table temporaire MyISAM. 
 # sql9a0_7_d.MYD # Fichier de données MyISAM pour table temporaire. 
 # sql9a0_7_d.MYI # Fichier d'index MyISAM pour table temporaire . 
 
 # sql9a0_7_c.frm # Il s'agit du fichier du moteur MEMORY. Pas de MYD ou MYI. 
27
Mark Byers

Comme l'a dit Mark, cela dépend du MOTEUR que vous lui demandez d'utiliser. Si vous ne donnez pas de MOTEUR, il fera "quelque chose", mais ne le gardera pas nécessairement en mémoire. Si vous souhaitez forcer la table à être en mémoire, vous devez la définir explicitement:

CREATE TEMPORARY TABLE foobar (id int) ENGINE=MEMORY;

Cependant, l'utilisation du moteur MEMORY est limitée. Pour plus d'informations, consultez tilisation de la table temporaire interne dans MySQL .

4
Alexander Janssen