MySQL执行计划

MySQL执行计划,第1张

我们知道,当一条sql查询语句执行时,会通过服务层中的优化器生成“查询执行计划”。而使用explain关键字可以查询到执行的SQL查询语句,从而知道MySQL是如何处理SQL的,即SQL的执行计划。因此根据执行计划我们可以选择更好的索引和写出更优化的查询语句,分析我们的查询语句或是表结构的性能瓶颈。

首先先解释一下以上执行计划中各列的含义:

2. PRIMARY: 如果查询语句中包含子查询或者UNION *** 作,指最外层的SELECT;

3. UNION: UNION中的第二个或后面的SELECT语句;

4. UNION RESULT: UNION 的结果;

5. SUBQUERY: 子查询中的第一个SELECT;

6. DERIVED: 导出表的SELECT(FROM子句的子查询)。

下面介绍在实际开发过程中,常见的几种类型:

1. const: 表示通过索引一次就找到数据,用于比较primary key或者unique索引,很快就能找到对应的数据;

2. eq_ref: 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常用于主键或唯一索引扫描;

3. ref: 非唯一索引扫描,返回匹配的所有行;

4. index_merge: 经常出现在使用一张表中的多个索引时,mysql会将多个索引合并在一起;

5. range: 使用一个索引检索指定范围的行,一般在where语句中会出现between、<、>、in等范围查询;

6. index: index连接类型与ALL相同,只是遍历索引树;

7. ALL: 全表扫描,找到匹配行。与index比较,ALL需要扫描磁盘数据,index值需要遍历索引树。

误区:

上述图片可以看到,key_len的值为9(即hotelID(4)+dateTime(5)),没有使用到全部联合索引,以下是改良后的sql语句:

此时key_len的值为14(即hotelID(4)+dateTime(5)+dateTime(5)),使用到了key中所有索引。

优化前:

很显然,从explain执行计划中可以看到,该sql语句使用了两个索引,但是从我们自己的优化目标中,只需要使用IDX_DataChange_CreateTime这一个索引就够了,以下是我们通过一些小手段影响优化器得到的优化方案:

mysqlzt进程冲突造成的。

解决方法:首先在cmd运行窗口。定位到mysql数据库:use mysql。执行查询语句,查看用户、密码等信息。重启一下就可以正常登录了。

执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等。如果 SQL 语句性能不够理想,我们首先应该查看它的执行计划。本文主要介绍如何在各种数据库中获取和理解执行计划,并给出进一步深入分析的参考文档。现在许多管理和开发工具都提供了查看图形化执行计划的功能,例如 MySQL Workbench、Oracle SQL Developer、SQL Server Management Studio、DBeaver 等;不过我们不打算使用这类工具,而是介绍利用数据库提供的命令查看执行计划。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8605210.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存