MySQL 清除表空间碎片

表的存储会出现碎片化,每当删除了一行内容,该段空间就会变为空白 当执行插入操作时,MySQL会尝试使用空白空间,但如果某个空白空间一直没有被大小合适的数据占用,就形成了碎片 当MySQL扫描表时,扫描的对象实际是包含碎片空间的 例如 一个表有1万行,每行10字节,会占用10万字节存储空间 执行删除操作,只留一行,实际内容只剩下10字节 但MySQL在读取时,仍看做是10万字节的表进行处理 所以,碎片越多,就会越来越影响查询性能

查看表碎片大小

01

查看某个表的碎片大小

mysql> SHOW TABLE STATUS LIKE '表名'; 结果中'Data_free'列的值就是碎片大小

02

列出所有已经产生碎片的表

mysql> select table_schema db, table_name, data_free, engine     
from information_schema.tables 
where table_schema not in ('information_schema', 'mysql')  and data_free > 0;

清除表碎片

01

MyISAM表

mysql> optimize table 表名

02

InnoDB表

mysql> alter table 表名 engine=InnoDB

建议 清除碎片操作会暂时锁表,数据量越大,耗费的时间越长 可以做个脚本,定期在访问低谷时间执行,例如每周三凌晨,检查DATA_FREE字段,大于自己认为的警戒值的话,就清理一次

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2016-02-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏pangguoming

MySQL命名、设计及使用规范--------来自标点符的《MySQL命名、设计及使用规范》

64720
来自专栏数据库

干货!超过500行的Mysql学习笔记

本文为作者初学Mysql时做的笔记,囊括了Mysql相关基本知识,内容较多超过500行笔记,希望对大家有帮助。 ? /* 启动MySQL */ net star...

23260
来自专栏Java技术栈

去 BAT 面试,总结了这 55 道 MySQL 面试题!

Mysql数据库软件是一个客户端或服务器系统,其中包括:支持各种客户端程序和库的多线程SQL服务器、不同的后端、广泛的应用程序编程接口和管理工具。

2.6K20
来自专栏python成长之路

My SQL常用操作汇总

24340
来自专栏Java后端技术栈

面试中有哪些经典的数据库问题?

1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯...

14010
来自专栏Java技术栈

去BAT面试完的Mysql面试题总结(55道,带完整答案)

55道互联网大公司的经典面试题,全部答对月薪5W+没问题。 1、一张表里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把m...

1.7K50
来自专栏Java架构师历程

Mysql存储过程

存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件。虽然他们的作用不仅限于批处理。

24120
来自专栏MYSQL轻松学

面试中有哪些经典的数据库问题?

1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯...

18600
来自专栏别先生

mysql存储过程的学习(mysql提高执行效率之进阶过程)

1:存储过程: 答:存储过程是sql语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理;存储过程存储在数据库内,可以由应用程序调用执行,而且允许用户声...

27560
来自专栏乐沙弥的世界

绑定变量及其优缺点

    绑定变量是Oracle解决硬解析的首要利器,能解决OLTP系统中library cache的过度耗用以提高性能。然刀子磨的太快,使起来锋利,却容 易折...

10920

扫码关注云+社区

领取腾讯云代金券