2015-06-04 6 views

Antwort

83

Das ist wirklich eine Informationsnachricht.

Wahrscheinlich tun Sie OPTIMIZE auf einer InnoDB Tabelle (Tabelle mit der InnoDB-Speicher-Engine, anstatt der MyISAM Speicher-Engine).

InnoDB unterstützt das OPTIMIZE nicht wie MyISAM. Es macht etwas anderes. Es erstellt eine leere Tabelle und kopiert alle Zeilen aus der vorhandenen Tabelle in es und im Wesentlichen löscht die alte Tabelle und benennt die neue Tabelle um und führt dann ein ANALYZE aus, um Statistiken zu sammeln. Das ist das, was InnoDB am nächsten kommt, um ein OPTIMIZE zu machen.

Die Nachricht, die Sie bekommen ist im Grunde MySQL-Server zu wiederholen, was die Speicher-Engine InnoDB MySQL Server gesagt:

Tabelle unterstützt damit nicht sagen, optimieren die Speicher-Engine InnoDB ist ...

„I (die InnoDB-Speicher-Engine) nicht eine OPTIMIZE-Operation wie mein Freund (die MyISAM-Speicher-Engine) macht. "

„+ tun neu analysieren statt“ ist die Speicher-Engine InnoDB sagen ...

„Ich habe beschlossen, eine verschiedenen Reihe von Operationen durchzuführen, die ein gleichwertiges Ergebnis erreichen werden.“

+2

ok, könnten Sie bitte die andere Art und Weise teilen, die Sie tun. –

+0

Ich bin sicher, dass dies irgendwo im MySQL Reference Manual steht; Das ist erwartetes Verhalten und nichts, worüber man sich Sorgen machen muss. (Außer, dass die Tabelle "gesperrt" wird und nicht verfügbar ist, während der Prozess bis zum Abschluss läuft, was bei einer HUGH JASS-Tabelle eine Weile dauern kann.) Referenz: [https://dev.mysql.com/doc/refman/5.5 /optimizable-table.html>(https://dev.mysql.com/doc/refman/5.5/en/optimize-table.html) Siehe den Abschnitt "InnoDB Details". – spencer7593

+0

Sie können auch MySQL Workbench verwenden, um die Tabellenoptimierung durchzuführen. Weitere Informationen finden Sie in der [Dokumentation zu Schema und Tabelleninspektor] (https://dev.mysql.com/doc/workbench/en/wb-develop-object-management-inspector.html#wb-develop-object-management-schema-inspector). für weitere Informationen. Beachten Sie die Option "Tabelle optimieren". –

10

OPTIMIZE TABLE arbeitet mit InnoDB-Engine in Ordnung nach dem offiziellen Support-Artikel: http://dev.mysql.com/doc/refman/5.5/en/optimize-table.html

Sie, dass optimize InnoDB-Tabellen bemerkt Tabellenstruktur und Aktualisierung von Indexstatistiken (so etwas wie ALTER TABLE) wieder aufzubauen.

Beachten Sie, dass diese Nachricht nur eine informative Erwähnung sein kann und die sehr wichtige Information der Status Ihrer Anfrage ist: nur OK!

mysql> OPTIMIZE TABLE foo; 
+----------+----------+----------+-------------------------------------------------------------------+ 
| Table | Op  | Msg_type | Msg_text               | 
+----------+----------+----------+-------------------------------------------------------------------+ 
| test.foo | optimize | note  | Table does not support optimize, doing recreate + analyze instead | 
| test.foo | optimize | status | OK                | 
+----------+----------+----------+-------------------------------------------------------------------+ 
0

Die bessere Option ist eine neue Tabelle, die die Zeilen in die Zieltabelle, fallen die aktuelle Tabelle und benennen Sie die neu erstellte Tabelle kopieren erstellen. Diese Methode ist gut für kleine Tische,

+1

Ich würde vorschlagen, Beispielcode zusammenzubauen, um mit Ihrer Antwort zu gehen. Schauen Sie sich an [wie schreibe ich eine gute Antwort] (http://stackoverflow.com/help/how-to-answer) – Frits

1

Der beste Option ist es, neue Tabelle erstellen, mit gleichen Eigenschaften

CREATE TABLE <NEW.NAME.TABLE> LIKE <TABLE.CRASHED>; 
INSERT INTO <NEW.NAME.TABLE> SELECT * FROM <TABLE.CRASHED>; 

Rename NEW.NAME.TABLE und TABLE.

CRASH
RENAME TABLE <TABLE.CRASHED> TO <TABLE.CRASHED.BACKUP>; 
RENAME TABLE <NEW.NAME.TABLE> TO <TABLE.CRASHED>; 

Nach der Arbeit gut, löschen

DROP TABLE <TABLE.CRASHED.BACKUP>; 
+0

danke, ich kann dies für viele andere Fälle verwenden. –