博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL 索引压缩碎片
阅读量:6227 次
发布时间:2019-06-21

本文共 1049 字,大约阅读时间需要 3 分钟。

MySQL 索引简介

索引也叫“键”(key),是存储引擎用于快速找到记录的一种数据结构。

索引对于良好的性能非常关键。数据量越来越大的时候,索引的重要性也会体现出来。

例如下面的sql:

Select * from user where userid=123;

如果没有创建索引,此时查询会全表扫描

如果在userid字段创建了索引,会根据索引来进行查询。 

下面对于同样的语句使用explain 进行执行计划分析。 

下图是未创建索引时的执行计划,可以看到type是all,key对应的内容为空,说明没有索引或者未命中索引。

  

下图是创建了userid的索引的执行计划,可以看到type是ref,possible_keys 是推测的索引名称,Key是索引名称。这样会减轻很多查询的压力。

 

 

MySQL 索引碎片

在数据表使用很长时间后,表上的B-Tree索引可能会碎片化,会降低查询的效率。碎片化的索引可能会以很差或者无序的方式存储在磁盘上。

如下图,是未经优化的数据表的使用情况。

执行语句:show table status like  'tables';,可以得到下图:

  

字段解释:

  1. Data_length : 数据的大小。
  2. Index_length: 索引的大小。
  3. Data_free :数据在使用中的留存空间,如果经常删改数据表,会造成大量的Data_free。

 

如果遇到上述情况,需要及时清理碎片,以便清理碎片,提升效率。

在清理碎片前,查看数据表的文件大小,做个参考。如下图:

 

可以看到mysql 的数据文件一般有两种:ibd,frm。

frm文件是数据表定义与格式。比如字段的类型。

Ibd文件是数据表的数据内容,主要是由数据内容与索引内容组成。可以看到当前需要整理的数据表的ibd文件是240MB。

 

 

 

MySQL 压缩索引碎片

执行命令:OPTIMIZE table tablename;可以进行压缩索引碎片。

需要注意的是,这个操作不应经常使用,以月左右的时间段为基数进行一次清理即可。

在执行optimize命令时,会锁定该表,相关操作会受到一定影响。 

查看压缩后的参数,如下图:

 

可以看到data_free为0,说明无留存空间了。Index_length 也少了很多。 

查看数据文件,同样得到了验证:

 

 

可以看到此表的ibd文件降到了160MB。较之前的240MB容量,释放了很多空间。

 

转载于:https://www.cnblogs.com/zhexy/p/7750350.html

你可能感兴趣的文章
手摸手,带你优雅的使用 icon
查看>>
wiremock使用入门
查看>>
Yii2事件示例解析
查看>>
使用ng2-admin搭建成熟可靠的后台系统 -- ng2-admin(一)
查看>>
源码看React setState漫谈(二)
查看>>
vue2.0组件通信
查看>>
Bootstrap:模态弹出框
查看>>
2017-08-30 前端日报
查看>>
在金融APP做自动化这条路上,我们填过哪些坑?
查看>>
用微信小程序连接WordPress网站
查看>>
分析一次ORACLE数据库Session暴增的问题
查看>>
ORACLE查询临时表空间使用率一直是100%的原因
查看>>
mongo同库联表查询
查看>>
关于Mac 下 Charles的使用 以及碰到无法抓包的问题
查看>>
7月份前端资源分享
查看>>
搜狗手机助手联合腾讯御安全 共建APP安全生态环境
查看>>
Codeigniter 4.0-dev 版源码学习笔记之五——相对于 3.x 的变化
查看>>
一条命令配置好ssh免密登录
查看>>
(译 & 转载) 2016 JavaScript 后起之秀
查看>>
代码迭代的几种方式
查看>>