目录
前言:
explain:
在 SQL 中,EXPLAIN 获取MySQL如何执行SELECT语句的信息,包括在SELECT语句的执行过程中表如何连接和连接的顺序。
EXPLAIN 命令会模拟查询执行过程,而不执行查询本身,从而解释查询的执行计划方式以及使用的索引,有助于检查查询是否使用有效的索引,以及需要进行优化的部分。
具体而言,EXPLAIN 会生成一个表格,其中包含了查询语句的各个部分对应的执行计划,包括查询类型、表扫描方式、索引使用情况等等。这个表格中的每一行对应查询过程中的一个步骤,而每一列则描述该步骤或该查询语句的其他相关信息。
通过使用 EXPLAIN 命令,开发人员可以更好地了解查询优化器的使用,确定查询中的性能问题并尝试通过调整查询语句、索引等来解决这些问题。
语法:
#直接在SELECT语句之前加上关键字explain
EXPLAIN SELECT 字段列表 FROM 表名 WHERE 条件;
我们在自建的表中使用一下这条语句:
EXPLAIN SELECT * FROM emp WHERE age BETWEEN 18 AND 30;
可以看到执行结果为:
我们逐一介绍这些都代表什么:
1.id:slesct查询的序列号,表示查询中执行select子句或者是顺序表的操作(id相同,执行顺序从上到下,id不同,值越大,越先执行)
2. select_type: 这个字段用于指示 MySQL 执行查询的类型
在给定的执行计划中,`select_type` 的值是 `SIMPLE`,这意味着查询是一个简单的查询,没有使用 UNION 查询或子查询等复杂特性。
3.type:指出查询语句所涉及的表名以及使用的访问方式。
4.possible_keys:表示可以在该查询中使用的索引。
5.key:实际使用的索引。
6.key_len:表示 MySQL 所使用的索引的长度。
7.ref:表示 MySQL 所使用的索引与表之间的关联条件。
8.rows:表示 MySQL 在执行查询时扫描的行数。
9. filtered:表示结果集的行数与扫描的行数之间的比率。
10. Extra:表示额外的执行计划细节。在本例中使用了 Using where,表示该查询使用了 WHERE 条件。
这里因为上面演示的时候使用的是单表查询,因此只有一个select语句,无法看出id的效果,因此我们在这里调用一下多表查询
explain select e.*, d.name from emp e left join dept d on e.dept_id = d.id;
运行结果:
我们在这里可以发现:id并不是自增的,这也就是我们之前提到的
id是slesct查询的序列号,表示查询中执行select子句或者是顺序表的操作(id相同,执行顺序从上到下,id不同,值越大,越先执行)
如果id不同的情况呢?
explain select * from emp where dept_id = (select id from dept where name = '销售部');
运行结果:
我们可以看到在这个情况下id就体现了执行顺序,我们可以知道在这个多表查询中,我们是先在demp表中执行select语句,然后在emp表中执行select语句。
总结:
本文介绍了更加实用的效率查看工具explain,以及他的各种用法,大家要熟练掌握我们目前已经介绍的这四个语句优劣查看工具,这样才可以玩转MySQL的优化。
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!