#查询数据库表中索引碎片大小等
SELECT
concat( TRUNCATE ( sum( data_length )/ 1024 / 1024, 2 ), 'MB' ) AS data_size, #所有数据大小
concat( TRUNCATE ( sum( max_data_length )/ 1024 / 1024, 2 ), 'MB' ) AS max_data_size, #最大可存数据大小
concat( TRUNCATE ( sum( data_free )/ 1024 / 1024, 2 ), 'MB' ) AS data_free, #索引碎片
concat( TRUNCATE ( sum( index_length )/ 1024 / 1024, 2 ), 'MB' ) AS index_size #索引大小
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = '数据库名';
show table status like 'orders'; #查看表索引碎片
针对MyISAM引擎表使用
optimize table orders; #整理碎片 optimize会锁表,时间很长建议空闲操作
针对InnoDB引擎表使用
alter table orders engine = innodb; #该操作会重建表的存储引擎,重组数据和索引的存储
MySQL 碎片就是 MySQL 数据文件中一些不连续的空白空间,这些空间无法再被全部利用,久而久之越来多,越来越零碎,从而造成物理存储和逻辑存储的位置顺序不一致。这些碎片的产生既浪费了空间,同时也因为数据从连续规则的存储方式变为随机分散的存储方式,磁盘 IO 会变的繁忙,数据库读写性能也随之下降 说白了就是删除数据后,之前的索引树会生成垃圾需要重新生成索引树