86 votes

Le moyen le plus rapide de copier une table dans mysql ?

Je veux copier une table dans MySQL. Quelle est la méthode la plus rapide ? Comme ceci ?

CREATE TABLE copy LIKE original;
INSERT INTO copy SELECT * FROM original;

ou

CREATE TABLE copy SELECT * FROM original;
ALTER TABLE copy ADD PRIMARY KEY (id);

ou y a-t-il un autre moyen ?

EDIT : Je m'inquiète de la recréation des index, comment mysql procède-t-il pour exécuter ces instructions ?

PS. Il n'est pas possible d'utiliser des outils en ligne de commande comme mysqldump, cela doit se faire à la volée.

51voto

ceteras Points 1732

Cette opération copie immédiatement la structure de la table, mais pas les données :

CREATE TABLE copy LIKE original;

Cela crée tous les index que le original la table avait.

Cela fonctionne de cette façon dans mysql 5.1.39 .

3 votes

Mais, il ne copiera pas les déclencheurs.

3 votes

Notez que cela ne copiera pas non plus les contraintes des clés étrangères.

50voto

Christopher Brown Points 315

Le moyen le plus rapide d'utiliser MyISAM les tables pendant que préserver les index ) et peut-être d'autres moteurs de stockage est :

CREATE TABLE copy LIKE original;
ALTER TABLE copy DISABLE KEYS;
INSERT INTO copy SELECT * FROM original;
ALTER TABLE copy ENABLE KEYS;

Vous voulez désactiver vos clés pour le chargement de votre base de données, puis recréer les clés à la fin.

De même, pour InnoDB :

SET unique_checks=0; SET foreign_key_checks=0; 
..insert sql code here..
SET unique_checks=1; SET foreign_key_checks=1;

(Comme indiqué dans les commentaires).

1 votes

Étrange. L'INSERT avec les clés a pris 36 minutes, et cette méthode a pris 10 + 26 minutes (insert + alter). 6 index, 28 M d'enregistrements, Win 7 x64, 8GB RAM.

0 votes

Un ENABLE KEYS provoque un "repair table". Vérifiez dans votre liste de processus de quelle manière cela se produit. Il y a deux types de réparation : 1. réparation de la table avec keycache 2. réparation de la table par tri La deuxième méthode est la plus rapide et ne sera utilisée que si myisam_max_sort_file_size est assez grand. dev.mysql.com/doc/refman/5.7/fr/repair-table-speed.html

1 votes

ALTER TABLE table DISABLE/ENABLE KEYS ne fonctionne pas dans InnoDB, et donne l'avertissement suivant Table storage engine for 'table' doesn't have this option .

14voto

dnagirl Points 11581

Desde el manual :

"CRÉER UNE TABLE ... SELECT ne crée pas automatiquement d'index pour vous. Ceci est fait intentionnellement pour rendre l'instruction aussi flexible que possible. Si vous voulez avoir des index dans la table créée, vous devez les spécifier avant l'instruction SELECT : "

CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;

Vous pouvez spécifier des indices et des types de données (pour éviter la conversion de type de données) dans les deux cas suivants CREATE TABLE LIKE y CREATE TABLE SELECT . Lequel des deux est le plus rapide dépend de votre configuration.

6voto

Draco Ater Points 8468

Fait create table mynewtable (select * from myoldtable) fonctionne dans mysql ? Si oui, vous pouvez l'essayer aussi.

2voto

Aravind Points 11

Si vous utilisez MyISAM, vous pouvez également copier et renommer les fichiers induviduels . .MYD, .MYI, .FRM dans le backend.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X