mysql索引及数据碎片

索引概念:

1)聚簇索引:是一种数据存储方式,innodb的聚簇索引实际上实在同一个结构i中保存了b+tree索引和数据行
2)innodb中没有定义主键,则会自动选择一个非空唯一的索引代替。如果没有这样的索引,innodb会隐式的定义一个主键作为聚簇索引

优点:

1)数据访问更快,因为索引和数据在一块,聚簇索引获取数据比非聚簇索引块
2)使用覆盖索引扫描的查询可以直接使用叶节点中的主键值

缺点:

1) 聚簇数据最大限度的提高了io密集型应用的性能,当数据全部加载到内存中,索引失去优势
2)插入严重依赖于插入顺序,如果不是按照主键顺序插入的,最好optimize table重新组织表
3)更新聚簇索引列的代价很高,innodb会强制将每个被更新的行移动到新的位置
4)二级索引(非聚簇索引)占用空间更大,因为二级索引的叶子节点包含了引用行的主键值

二级索引

1) 二级所以访问数据需要两次索引查询
2)二级索引叶子节点报错的不是指向物理位置的指针,而是主键值
3)二级索引查找行,存储引擎需要去二级索引的叶子节点获得对应的主键值,然后根据这个值去聚簇索引中查找对应的行

覆盖索引:

通常情况下,我们以where条件来创建合适的索引,如果mysql可以使用索引直接来获取数据,这样就不用读取数据行(索引的叶子节点已经包含了要查询的数据),则不在需要回表,这样的索引我们成为覆盖索引

覆盖索引能极大的提高查询性能

覆盖索引的好处

1)索引的条目一半远小于数据行大小,如果只需要读取索引,mysql就会极大的减少访问数据量
2)因为索引是按照列的顺序存储的(在单个也内如此),对于io密集型范围查询要比随机io少的多
3)由于innodb的聚簇索引,覆盖索引对innodb表特别有用,innodb的二级索引在子节点保存了行的主键值,所以二级主键能够覆盖查询;则可以避免对主键索引的二次查询。

数据碎片

行碎片
这种碎片是指数据行存储在多个地方的多个段中,即使查询只从索引中访问一条数据,行碎片也会导致性能下降
行间碎片
指的是逻辑上顺序的页,但是在磁盘上不是顺序存储的。行间碎片对全表扫面or聚簇索引扫描之类的操作影响很大。因为这些操作原本会在磁盘的顺序存储中获利
剩余空间碎片
指数据页中有大量的剩余空间,这会导致服务器扫描大量不需要的磁道,造成资源浪费

innodb不会出现短小的行碎片,因为innodb会移动短小的行并重新写到一个片段中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韶博雅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值