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

时间:2015-06-04 05:29:28

标签: mysql

我正在使用MySQL 5.5并尝试使用 $(this).next('.box').slideToggle('fast', function () { $(this).parent().animate({ scrollTop: $(this).position().top - $(this).parent().offset().top - 15 }) }) 查询进行索引重建。我收到以下错误:

  

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

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

4 个答案:

答案 0 :(得分:132)

这真是一条信息性消息。

可能,您正在InnoDB表上进行OPTIMIZE(使用InnoDB存储引擎的表,而不是MyISAM存储引擎)。

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

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

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

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

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

“我决定执行不同的操作集,这些操作将获得相同的结果。”

答案 1 :(得分:17)

根据官方支持文章,{p> 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                                                                |
+----------+----------+----------+-------------------------------------------------------------------+

答案 2 :(得分:3)

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

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>;

答案 3 :(得分:0)

更好的选择是创建一个新表将行复制到目标表,删除实际表并重命名新创建的表。 这种方法适用于小型表,