MySQL中optimize的基础使⽤
基础
MySQL执⾏命令delete语句时,如果包括where条件,并不会真正的把数据从表中删除,⽽是将数据转换成了碎⽚,通过下⾯的命令可以查看表中的碎⽚数量和索引等信息:
mysql > show table status like 'table_name'
查询结果中:
Index_length 代表索引的数量
Data_free 代表碎⽚数量
然后执⾏下⾯命令进⾏优化整理:
mysql > optimize table table_name
如果之前的碎⽚数量多,执⾏时间可能会久⼀点,执⾏结束后出现下⾯框内的数据则优化成功。
再通过之前的查看命令来看执⾏效果:
mysql > show table status like 'table_name'
InnoDB
InnoDB引擎的表分为独享表空间和同享表空间的表,我们可以通过show variables like ‘innodb_file_per_table’;来查看是否开启独享表空间。
我本地是开启了独享表空间的。此时是⽆法对表进⾏optimize操作的,如果操作,会返回如图信息,最后的⼀条Msg_text: Table does not support optimize, doing recreate + analyze instead。因为该结构下删除了⼤量的⾏,此时索引会重组并且会释放相应的空间因此不必优化。
注意事项:
由于命令optimize会进⾏锁表操作,所以进⾏优化时要避开表数据操作时间,避免影响正常业务的进⾏。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论