51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

mysql 数据库执行计划(常见索引类型)

mysql 数据库执行计划

在介绍数据库服务程序运行逻辑时,在SQL层处理SQL语句时,会根据解析器生成解析树(多种处理方案);

然后在利用优化器生成最终的执行计划,然后在根据最优的执行计划进行执行SQL语句;

作为管理员,可以在某个语句执行前,将语句对应的执行计划提取出来进行分析,便可大体判断语句的执行行为,从而了解执行效果;

可以简单理解:执行计划就是最优的一种执行SQL语句的方案,表示相应SQL语句是如何完成的数据查询与过滤,以及获取;

2数据库执行计划获取

可以利用命令进行获取执行计划信息:explain/desc

explain select * from baimei.t100w where k2='VWlm';
 或者
 desc select * from baimei.t100w where k2='VWlm';

3数据库索引应用类型 type

利用类型信息,来判断确认索引的扫描方式,常见的索引扫描方式类型:

| 序号 | 类型 | 解释说明 | |----|--------------|----------------------------------------------| | 01 | ALL - ok | 表示全表扫描方式,没用利用索引扫描类型; | | 02 | index | 表示全索引扫描方式,需要将索引树全部遍历,才能获取查询的信息(主键index=全表扫描) | | 03 | range | 表示范围索引方式,按照索引的区域范围扫描数据,获取查询的数据信息; | | 04 | ref | 表示辅助索引等值(常量)查询,精准定义辅助索引的查询条件 | | 05 | eq_ref | 表示多表连接查询时,被驱动表的连接条件是主键或者唯一键时,获取的数据信息过程; | | 06 | const/system | 表示主键或者唯一键等值(常量)查询,精准定义索引的查询条件 |

常见索引类型:
① 扫描类型-ALL:
情况一:查询的条件没有走索引
情况二:在利用like查询数据时,%在查询内容前面,也会出现全表扫描
情况三:在利用!=/not in排除查找数据信息时,也可能会出现全表扫描

② 扫描类型-index:
情况一:查询数据信息时,指定了查询索引列,但是没有将索引列作为查询条件

以上的查询数据方式不推荐

③ 扫描类型-range
情况一:利用> < >= <= between ... , 就会出现范围查询
情况二:在利用like查询数据时,%在查询信息后面,也会出现范围查询

④ 扫描类型-ref
情况一:利用辅助索引列,进行等值查询数据

⑤ 扫描类型-eq_ref
情况一: 被驱动表的连接条件是主键或者唯一键时,获取的数据信息过程;

⑥ 扫描类型-system/const
情况一:利用主键索引(聚簇索引)查询数据时,采用等值方式查询数据

扫描类型执行计划展示效果:

1 -扫描类型-ALL:

此类型出现原因1:查找条件没有索引;

此类型出现原因2:查询条件不符合查询规律(like %%-只针对辅助索引,不影响主键索引-range);

此类型出现原因3:查询条件使用的了排除法(!=/not in-只针对辅助索引,不影响主键索引);

2 扫描类型-index:

此类型出现原因:扫描查询列设置了辅助索引信息,但是没有基于索引列设置查询条件

3 扫描类型-range:

此类型出现原因:查找条件是范围信息(> < >= <= between and in or)

特殊说明:在利用in查询数据信息时,查询效果和逻辑语句or的查询效果是一致;

此类型出现原因:查找条件是模糊信息(like)

4扫描类型-ref:

此类型出现原因:查找条件是精确等值信息

5扫描类型-eq_ref:

此类型出现原因:被驱动表的链表条件是主键或唯一键时

当连接查询没有where条件时:

左连接查询时,前面的表是驱动表,后面的表是被驱动表,右连接查询时相反;

内连接查询时,哪张表的数据较少,哪张表就是驱动表

当连接查询有where条件时,带where条件的表是驱动表,否则是被驱动表

说明:在没有设置比较合理索引情况下,默认选择结果集小的作为驱动表,即小表驱动大表;

但是,此时如果给city表中的population加上索引信息,查找数据的执行计划才是最优的,对应获取数据的性能是最好的;

MySQL驱动表和被驱动表说明:https://www.cnblogs.com/baimei666/p/16892774.html

6 扫描类型-const:

此类型出现原因:查询的数据条件是主键或唯一键,并且是精确等值查询;

数据库索引覆盖长度 :

连接

赞(1)
未经允许不得转载:工具盒子 » mysql 数据库执行计划(常见索引类型)