zoukankan      html  css  js  c++  java
  • MySQL 索引压缩碎片

    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容量,释放了很多空间。

  • 相关阅读:
    图像处理笔记(十)
    图像处理笔记(九):频率域滤波
    图像处理笔记(八)
    图像处理笔记(七)
    图像处理笔记(六):灰度变换与空间滤波
    分布式
    关于python代码是编译执行还是解释执行
    python中的元类metaclass
    Python的函数参数传递
    递推思想
  • 原文地址:https://www.cnblogs.com/zhexy/p/7750350.html
Copyright © 2011-2022 走看看