Answers:
这确实是一条信息性消息。
可能您正在对InnoDB表(使用InnoDB存储引擎而不是MyISAM存储引擎的表)进行OPTIMIZE 。
InnoDB不支持MyISAM支持的OPTIMIZE。它做了一些不同的事情。它创建一个空表,并将现有表中的所有行复制到该表中,并实质上删除旧表并重命名新表,然后运行ANALYZE来收集统计信息。这是InnoDB进行优化的最接近方法。
您得到的消息基本上是MySQL服务器,重复了InnoDB存储引擎告诉MySQL服务器的内容:
表不支持优化是InnoDB存储引擎说的...
“我(InnoDB存储引擎)不像我的朋友(MyISAM存储引擎)那样执行OPTIMIZE操作。”
InnoDB存储引擎说“改为重新创建+分析”。
“我决定执行一组不同的操作,以获得相同的结果。”
OPTIMIZE TABLE
根据官方支持文章,InnoDB引擎可以很好地工作:http : //dev.mysql.com/doc/refman/5.5/en/optimize-table.html
您会注意到,优化InnoDB表将重建表结构并更新索引统计信息(如ALTER TABLE
)。
请记住,此消息仅是参考性提及,非常重要的信息是您的查询状态:好的!
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 |
+----------+----------+----------+-------------------------------------------------------------------+
最好的选择是创建具有相同属性的新表
CREATE TABLE <NEW.NAME.TABLE> LIKE <TABLE.CRASHED>;
INSERT INTO <NEW.NAME.TABLE> SELECT * FROM <TABLE.CRASHED>;
重命名NEW.NAME.TABLE和TABLE.CRASH
RENAME TABLE <TABLE.CRASHED> TO <TABLE.CRASHED.BACKUP>;
RENAME TABLE <NEW.NAME.TABLE> TO <TABLE.CRASHED>;
工作正常后,删除
DROP TABLE <TABLE.CRASHED.BACKUP>;