> optimize table endpoint G; *************************** 1. row *************************** Table: falcon_global.endpoint Op: optimize Msg_type: note Msg_text: Table does not support optimize, doing recreate + analyze instead *************************** 2. row *************************** Table: falcon_global.endpoint Op: optimize Msg_type: status Msg_text: OK 2 rows in set (6.37 sec) ERROR: No query specified Thu Aug 27 10:48:08 2020
> alter table endpoint engine='InnoDB'; Query OK, 0 rows affected (6.26 sec) Records: 0 Duplicates: 0 Warnings: 0 Thu Aug 27 10:49:21 2020
这里mysql给的提示是
Note>> Table does not support optimize, doing recreate + analyze instead
Status>> OK
也就是说 optimize table 对于innodb来说,无法作为
a single operation,实际的操作是:
ALTER TABLE test.foo ENGINE=InnoDB;
ANALYZE TABLE test.foo;
MySQL5.7已经推荐对于InnoDB的table使用 alter table table_name engine=innodb;语句的方式来进行表碎片优化。
使用optimize table table.name;
出现Table does not support optimize, doing recreate + analyze instead
#########
Everytime you do optimize MySQL, by using mysqlcheck -A -o or using ./mysql_optimize from here. You may see the output Table does not support optimize, doing recreate + analyze instead. It is because the table that you are using is InnoDB. You can optimize the InnoDB tables by using this.
#########
1, ALTER TABLE table_name ENGINE='InnoDB'; This will create a copy of the original table, and drop the original table, and replace to the original place. Although this is safe, but I suggest you do backup and test first before doing this. 原来如此,大致意思是说innodb的数据库不支持optimize,可以用 ALTER TABLE table.name ENGINE='InnoDB'; 该方法会对旧表以复制的方式新建一个新表,然后删除旧表。虽然这个过程是安全的,但是在进行操作时还是先进行备份为好 还有一种方式: You can make OPTIMIZE TABLE work on other storage engines by starting mysqld with the --skip-new or --safe-mode option. In this case, OPTIMIZE TABLE is just mapped toALTER TABLE.
2,
上面是说要求我们在启动的时候指定--skip-new或者--safe-mode选项来支持optimize功能