MySQL中的EXPLAIN是用于优化查询的工具,可以帮助我们理解查询执行的方式,找出可能存在的性能问题,并提供优化建议。下面是使用快速查询手册的详细攻略:
1. 确认查询语句¶
首先需要确认要分析的查询语句,例如以下这个简单的 SELECT 语句:
SELECT * FROM `users` WHERE `name` LIKE 'J%';
2. 使用EXPLAIN进行查询分析¶
使用EXPLAIN关键字,加上要查询的语句,即可得到该查询的执行计划,如下:
EXPLAIN SELECT * FROM `users` WHERE `name` LIKE 'J%';
执行上面的语句,我们可以得到类似如下的输出结果:
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | users | ALL | NULL | NULL | NULL | NULL | 47 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
上面的输出结果包含以下字段:
- id:查询标识符,用于区分不同的查询。
- select_type:查询类型,主要有SIMPLE、PRIMARY、UNION、SUBQUERY等类型,表示不同的查询方式。
- table:查询涉及的表。
- type:查询类型,主要有ALL、index、range、ref、eq_ref、const等类型,表示不同的查询方式。
- possible_keys:可能用到的索引。
- key:实际用到的索引。
- key_len:用到的索引长度。
- ref:列与索引之间的匹配。
- rows:考虑了2个条件后匹配到的行数。
- Extra:影响查询性能的额外信息,如Using where表示需要进一步过滤。
根据执行计划的结果,我们可以简单解释以下几个关键的字段:
-
type:这是查询执行中最重要的字段之一,它表示MySQL查询的方式,可能的值有ALL、index、range、ref、eq_ref、const等。从上到下,这些值的效率逐渐提高,对于我们去优化查询效率非常有帮助。
-
possible_keys:这个字段表示可能用到的索引,值为逗号分隔的索引名称列表,其查找方式是基于表结构和查询条件计算得出的。如果一个查询涉及到多个表,则将会显示一个连接的列表,每个连接列表对应一个可能的连接类型。
-
key:这个字段表示实际用到的索引。如果一个查询使用了多个表的连接,那么这个字段显示的将是连接顺序的列表。
-
rows:这个字段表示MySQL查询返回的行数,它是基于表统计信息以及查询条件计算而来的一个估计值。
3. 进行优化并测试¶
通过显式调用了 EXPLAIN,我们可以了解 MySQL 调用哪个索引、列我们可以加速、MySQL 采用了哪种连接方式、MySQL 是否启用了内存表等信息,对于查询效率的提升有很大的参考价值。为了优化查询效率,我们通常可以根据EXPLAIN的结果对查询语句或数据库索引进行调整。
举个例子,如果我们发现查询中用到的索引是non-unique非唯一索引,最好调整表结构将其改成unique唯一索引,可以使用如下语句添加唯一索引:
ALTER TABLE `users` ADD UNIQUE INDEX `users_name_idx` (`name`);
再使用 EXPLAIN 关键字看看执行计划有什么变化,是否出现了 new filing 优化提示:
EXPLAIN SELECT * FROM `users` WHERE `name` LIKE 'J%';
如果执行结果进一步优化,大大减小 row,我们就可以判断调整后确实提升了查询效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL中explain使用快速查询手册 - Python技术站