MySQL调优

索引

索引是帮助MySQL高效获取数据的排好序数据结构

索引数据结构

  • 二叉树:【问题】顺序插入后形成类似链表的线性结构
  • 红黑树(二叉平衡树):【问题】数据量大时层级会比较多
  • Hash表:【问题】不方便范围查找
  • B+Tree
B+Tree

B-Tree

  • 叶节点具有相同的深度,叶节点的指针为空
  • 所有索引元素不重复
  • 节点中的数据索引从左到右递增排列

B-Tree
B+Tree(B-Tree变种)

  • 非叶子节点不存储data,只存储索引(冗余),可以放等多的索引
  • 叶子节点包含所有索引字段
  • 叶子节点用指针连接,提高区间访问的性能

B+Tree

存储引擎

MyISAM

索引文件和数据文件分离(非聚集)
一张表包含以下三个部分:

  • frame表结构(.frm)
  • MyISAM data数据(.myd)
  • MyISAM index索引(.myi)

MyISAM存储引擎索引实现
MyISAM
缺点:事务和行级锁

InnerDB

聚集

  • 表数据文件本身就是按B+Tree组织的一个索引结构文件
  • 聚集索引-叶节点包含了完整的数据记录

问题:

  • 为什么建议InnoDB表必须建主键,并且推荐使用整形的自增主键?(性能考虑,如果没有主键mysql会自动根据唯一索引或rowid建立索引。自增插入效率高)
  • 为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省存储空间)

一张表包含以下两个部分:

  • frame表结构(.frm)
  • InnerDB 数据+索引(.ibd)
聚集索引

聚集索引

非聚集索引

非聚集索引

联合索引

联合索引
最左前缀原理

Explain工具

在select语句之前增加explain关键字,MySQL会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL(如果from中包含子查询,仍会执行该子查询,将结果放入临时表中)

字段

  • id:系列号,id列越大执行优先级越高
  • select_type:表示对应行是简单还是复杂查询(simple、primary、subquery、derived,是否包含子查询和union)
  • key:索引名称

参考资料:

数据结构
Explain详解与索引优化最佳实践.pdf 提取码:qixi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值