"表不支持优化,重新创建+分析"是什么意思?

Vik*_*ore 78 mysql

我正在研究MySQL 5.5并尝试使用OPTIMIZE TABLE查询进行索引重建.我收到以下错误:

表不支持优化,而是重新创建+分析

这是什么意思?MySQL引擎不允许索引重建吗?在MySQL 5.5引擎级别上,此消息背后正在做什么?

spe*_*593 162

这真的是一条信息性的消息.

可能,你在InnoDB表上做了OPTIMIZE (使用InnoDB存储引擎的表,而不是MyISAM存储引擎).

InnoDB不像MyISAM那样支持OPTIMIZE.它做了不同的事情.它创建一个空表,并将现有表中的所有行复制到其中,并基本上删除旧表并重命名新表,然后运行ANALYZE来收集统计信息.这是InnoDB最接近OPTIMIZE的地方.

你得到的消息基本上是MySQL服务器重复InnoDB存储引擎告诉MySQL服务器的内容:

表不支持优化是InnoDB存储引擎说...

"我(InnoDB存储引擎)不像我的朋友(MyISAM存储引擎)那样进行OPTIMIZE操作."

"正在重新创建+分析"是InnoDB存储引擎说...

"我已决定执行一系列不同的操作,以达到同等效果."

  • 好的,请你分享一下你正在做的不同方式. (8认同)
  • 对在 db world 中发起的人的很好的解释。非常感谢 (2认同)
  • 当心-如果磁盘空间不足,请不要使用此选项,因为它可能会导致服务器用尽试图重新创建非常大的表的机会。 (2认同)

小智 18

OPTIMIZE TABLE根据官方支持文章:http://dev.mysql.com/doc/refman/5.5/en/optimize-table.html与InnoDB引擎一起正常工作

您会注意到优化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                                                                |
+----------+----------+----------+-------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

  • 不是真的,MySQL 会给出失败原因:临时文件写入失败,操作失败。 (2认同)

tqu*_*ang 6

最好的选择是创建具有相同属性的新表

CREATE TABLE <NEW.NAME.TABLE> LIKE <TABLE.CRASHED>;
INSERT INTO <NEW.NAME.TABLE> SELECT * FROM <TABLE.CRASHED>;
Run Code Online (Sandbox Code Playgroud)

重命名NEW.NAME.TABLE和TABLE.CRASH

RENAME TABLE <TABLE.CRASHED> TO <TABLE.CRASHED.BACKUP>;
RENAME TABLE <NEW.NAME.TABLE> TO <TABLE.CRASHED>;
Run Code Online (Sandbox Code Playgroud)

工作正常后,删除

DROP TABLE <TABLE.CRASHED.BACKUP>;
Run Code Online (Sandbox Code Playgroud)

  • 这不会重新创建外键。 (5认同)
  • 此方法是否保留索引和触发器? (2认同)