Mysql之执行计划
1. 查询的执行过程
1. 第一个阶段(SQL解析器)
SQL解析
由Mysql服务器的SQL解析器负责处理,若SQL语句存在语法错误,则可在该阶段得到检测。经过SQL解析后,最终形成SQL解析树。
Mysql服务器使用SQL解析树而非SQL语句本身以执行查询。
2. 第二个阶段(SQL优化器)
SQL优化
删除不必要的条件,将复杂运算简单化
若存在多表连接,则确定读表顺序
根据用于各数据表的条件与索引统计信息,确定要使用的索引
将获取的记录放入临时表,确定是否需要再次加工
经历第二阶段以后,获取最终执行计划
3. 第三个阶段
读取记录
依据执行计划向存储引擎请求读取记录
4. 第一个阶段,第二个阶段都是由mysql引擎处理的,第三个阶段由mysql引擎与存储引擎同时参与处理

2. 优化器种类
1. 基于代价的优化器CBO
基于代价的优化器处理查询时会创建多种可用方法,然后根据各种处理的消耗信息与目标数据表的统计信息,计算各执行计划代价,最后从中选择代价最小的执行计划作为最终执行计划
2. 基于规则的优化器RBO
几乎没有各数据表或索引的统计信息,相对较慢的CPU计算会导致代价计算过程负荷较重,现在几乎不再使用
3. 统计信息
1. 开启统计信息
1. 创建表时,直接指定参数
create table test(id int ,name varchar(50),primary key(id)) engine=innodb stats_persistent=1;
stats_persistent
1 表示将数据表的统计信息保存到mysql.innodb_index_stats与innodb_table_stats表
0 表示不保存
2. 如果创建表不指定参数,是否保存统计信息由innodb_stats_persistent系统变量决定
2. 什么时候收集数据表的统计信息
1. 打开新的数据表时
2. 大量修改数据表的记录时(在数据表的全部记录中执行1/16的UPDATE,INSERT,DELETE时)
3. 执行ANALYZE table命令时
4. 执行show table status或show index from命令时
5. 激活innodb监视器时
6. innodb_stats_on_metadata系统设置为ON并执行show table status命令时
4. 执行计划分析
1. 使用EXPLAIN命令查看执行计划

浙公网安备 33010602011771号