首页 / MYSQL / mysql执行计划初步解读2
mysql执行计划初步解读2
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql执行计划初步解读2,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4426字,纯文字阅读大概需要7分钟。
内容图文
继续上次没有写完的执行计划部分
6.possible_keys可能使用到的索引,这个的理解呢, 表示查询时可能使用的索引。只是可能用到,但是并不一定用到。如果是空的,表明肯定是没有相关的索引。但是如果有值,也不一定能够用到。
7.key实际使用的索引。
6,7的话一起来看下面的例子:
mysql> explain select * from `order` where seller_id = 19;
+----+-------------+-------+------------+------+------------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+------------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | order | NULL | ALL | 商家,seller_id | NULL | NULL | NULL | 2197 | 100.00 | Using where |
+----+-------------+-------+------------+------+------------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
mysql> explain select * from `order` where customer_id = 55029;
+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+
| 1 | SIMPLE | order | NULL | ref | customer_id | customer_id | 8 | const | 10 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)
对于第一条sql,这里的possible_keys的结果为有可能走seller_id上的索引,但是实际的key为NULL。之前也说过了,因为只有一个卖家,虽然有索引,但是Innodb选择了全表扫描,这是基于CBO进行选择的结果。我们现在删除一下seller_id上的索引看看是怎么样的。
mysql> explain select * from `order` where seller_id = 19;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | order | NULL | ALL | 商家 | NULL | NULL | NULL | 2197 | 100.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
可见已经走的是全表扫表了。
第二条sql这里的possible_keys的结果为seller_id,实际上也是走的seller_id,说明索引生效了。
8.key_len 使用到索引字段的长度
注意:key_len是通过定义得到的,表示索引字段的最大可能长度,并非实际使用长度。
曾经踩过一个坑,因为创建索引的时候,并没有主动定义索引长度,结果长度为20的字段索引长度只有4。然后索引不生效导致数据库雪崩。所以平时最好养成一个定义索引时记得加长度的习惯。
9.ref显示哪个字段或常数与key一起被使用
如果是使用的常数等值查询,这里会显示const
如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段
如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func
如果没有用索引的话,这里会显示NULL
10.row扫描行数
这个数表示mysql要遍历多少数据才能找到,是根据统计得来的,可能并不是十分精准
11.filtered过滤百分比
针对条件的记录数的百分比所做的一个估算(这里是一个悲观估算,即最大值),即mysql将要过滤行数的百分比。
12.Extra额外信息
Using index:表示覆盖索引,只查询索引值就满足sql的要求了。
mysql> explain select customer_id from `order` where customer_id = 55029;
+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
| 1 | SIMPLE | order | NULL | ref | customer_id | customer_id | 8 | const | 10 | 100.00 | Using index |
+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
Using where:表示条件查询,即单纯索引不能够满足所有需求列了。
暂时先写一下这些简单的理解吧,如有不对之处,请指正。
内容总结
以上是互联网集市为您收集整理的mysql执行计划初步解读2全部内容,希望文章能够帮你解决mysql执行计划初步解读2所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。