MySQL的sql优化涉及的概念
- B+树索引
在谈到MySQL时,默认使用的存储引擎为innodb。而innodb组织数据的方式为B+树,即表就是索引,索引就是表。准确来说表是主键索引所在的B+数。
简单介绍一下B+树
- B+树是一棵M叉的平衡树,由根节点、分支节点和叶子节点组成。
- 根节点和分支节点不存储具体的值,只存储索引的键。
- 叶子节点存储键和值,键位索引字段,如果是主键索引,则值为除主键以外的所有字段值,如果是二级索引,则值为主键。
- 从根节点到任何一个叶子节点的距离都是一样。
例如有如下表
主键索引大致结构如下
二级索引大致结构如下
- sql执行经历的组件
- 连接器 负责连接管理,只有跟服务器建立了连接才能向服务器发送sql
- 查询缓存 如果待执行的sql之前已经执行过,则直接从查询缓存中返回sql执行结果,从而避免了后续的执行步骤。5.7查询缓存默认为关闭状态。8.0直接从代码层面删除了查询缓存
- 分析器 对sql语句进行语法和语义分析,如果没有错误则会生成一颗语法树
- 优化器 对上一步生成的语法树进行解析,一条sql可能有多种不同的执行路径,从中选择一个最佳的路径作为执行计划
- 执行器 执行器根据优化器生成的执行计划执行并返回执行结果
- 执行计划
执行计划描述了如何从存储引擎获取数据,表之间如何做关联,以及如何过滤数据等等。要获取执行计划可以通过DESC SQL或EXPLAIN SQL命令
mysql> desc select * from emps e where e.emp_no desc format=json select * from emps e where e.emp_no desc format=tree select * from emps e where e.emp_no Filter: (e.emp_no Table scan on e (cost=30956.70 rows=299637)
|
+-----------------------------------------------------------------------------------------------------------------+