Ich möchte eine Tabelle in MySQL kopieren. Was ist der schnellste Weg? So was?
CREATE TABLE copy LIKE original;
INSERT INTO copy SELECT * FROM original;
oder
CREATE TABLE copy SELECT * FROM original;
ALTER TABLE copy ADD PRIMARY KEY (id);
oder gibt es einen anderen weg
EDIT: Ich mache mir Sorgen, dass die Indizes neu erstellt werden. Wie geht MySQL vor, um diese Anweisungen auszuführen?
PS. kann keine Kommandozeilen-Tools wie mysqldump verwenden, muss on-the-fly sein.
Der schnellste Weg, MyISAM- Tabellen unter Beibehaltung von Indizes und möglicherweise anderen Speicher-Engines zu verwenden, ist:
Sie möchten Ihre Schlüssel für das Laden der Datenbank deaktivieren und die Schlüssel am Ende neu erstellen.
Ebenso für InnoDB :
(Wie in den Kommentaren erwähnt.)
quelle
ALTER TABLE table DISABLE/ENABLE KEYS
funktioniert nicht in InnoDB und gibt unten WarnungTable storage engine for 'table' doesn't have this option
.SET unique_checks=0; SET foreign_key_checks=0;
Sie hier SQL-Code einfügenSET unique_checks=1; SET foreign_key_checks=1;
Aus dem Handbuch :
"CREATE TABLE ... SELECT erstellt nicht automatisch Indizes für Sie. Dies geschieht absichtlich, um die Anweisung so flexibel wie möglich zu gestalten. Wenn Sie Indizes in der erstellten Tabelle haben möchten, sollten Sie diese vor der SELECT-Anweisung angeben:"
Sie können Indizes und Datentypen (um eine Datentypkonvertierung zu vermeiden) mit
CREATE TABLE LIKE
und angebenCREATE TABLE SELECT
. Welches schneller ist, hängt von Ihrem Setup ab.quelle
Führen Sie diese beiden Abfragen aus, um mit Indizes und Triggern zu kopieren:
Um nur Struktur und Daten zu kopieren, verwenden Sie diese:
quelle
INSERT INTO
statt seinINSERT
?Funktioniert
create table mynewtable (select * from myoldtable)
in MySQL? Wenn ja, können Sie es auch versuchen.quelle
Der beste Weg, um die Struktur und alle Einträge von einer Tabelle in eine andere Tabelle zu kopieren (indem Sie eine neue Tabelle erstellen), ist diese Abfrage ...
CREATE TABLE new_table LIKE old_table; INSERT new_table SELECT * FROM old_table;
quelle
Versuchen Sie es
SELECT INTO
und verwenden Sie eine Variable als Vermittler.Sie müssen zuerst die empfangende Tabelle erstellen, um dieselbe Struktur wie die Quelltabelle zu haben.
Das Beste ist, es ist intern, also schnell. Sie verlieren jedoch Ihre Indizes.
quelle
Wenn Sie MyISAM verwenden, können Sie auch die einzelnen Dateien kopieren und umbenennen. .MYD-, .MYI-, .FRM-Dateien im Backend
quelle
Vielleicht könnten Sie einen Blick darauf werfen
SHOW CREATE TABLE
.Schritte zu unternehmen:
Gehe zu phpmyadmin
Gehen Sie zu SQL
Führen Sie diese Abfrage aus
Das Ergebnis ist eine vollständige CREATE TABLE-Anweisung. Bearbeiten Sie die Abfrage, bis Sie zufrieden sind.
Ressource: http://dev.mysql.com/doc/refman/5.7/en/show-create-table.html
quelle
Ist ein schneller Weg, aber vielleicht nicht die schnellste Ursache für Indizes.
quelle