MySQL中explain使用快速查询手册

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技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Mybatis中的动态SQL语句解析

    关于MyBatis中的动态SQL语句解析攻略,主要包括以下内容: 1. 动态SQL语句概述 MyBatis是一种基于Java的持久层框架,采用的是将SQL语句与Java代码进行分离的方法,目的是在业务开发时避免直接操作数据库,从而增加程序的可维护性和可扩展性。在MyBatis中,动态SQL语句是一种能够根据不同条件拼接不同SQL语句的机制,具有很高的灵活性和…

    database 2023年5月22日
    00
  • MySQL5创建存储过程的示例

    MySQL5是一个流行的关系型数据库管理系统,支持创建存储过程。下面是MySQL5创建存储过程的示例攻略。 创建存储过程的前提条件 在开始创建存储过程之前,需要先确认以下前提条件: 确认MySQL5版本已经支持存储过程功能,可以通过查询MySQL version或SELECT @@version确认; 掌握MySQL5存储过程的语法,创建格式为: CREAT…

    database 2023年5月22日
    00
  • mysql的计划任务与事件调度实例分析

    MySQL的计划任务与事件调度实例分析 MySQL是一种常用的数据库管理系统,拥有强大的功能、可靠性、性能和可扩展性。MySQL允许用户使用工具进行数据备份、还原,以及执行计划任务和事件调度,从而更好地管理和维护数据库。 计划任务 什么是计划任务 计划任务就是执行按计划发生的一次或多次操作的任务。MySQL允许用户使用计划任务来定期执行任意SQL操作,比如备…

    database 2023年5月22日
    00
  • MySQL如何处理无效数据值?

    MySQL会在处理无效数据值时,根据数据类型和使用场景的不同,采取不同的处理方式。主要包括以下几种方式: 数据类型不匹配时,MySQL会自动进行数据类型转换。例如,如果数字类型的字段中存储了字符串类型的数据,MySQL会尝试将其转换为数字类型。如果转换失败,MySQL会将其转换为0或NULL。 字符串类型的字段中存储了超长数据时,MySQL会根据字段的定义,…

    MySQL 2023年3月10日
    00
  • Springboot mybais配置多数据源过程解析

    下面就详细讲解“Springboot mybais配置多数据源过程解析”的完整攻略。 一、引入依赖 首先,我们需要在pom.xml文件中引入相关的依赖,具体如下: <dependencies> <!–SpringBoot启动器–> <dependency> <groupId>org.springframew…

    database 2023年5月18日
    00
  • 关注网银系统的安全:安全模型和架构设计的介绍

    关注网银系统的安全:安全模型和架构设计的介绍 在当今数字化时代,越来越多的人使用网银系统进行银行业务的处理,如转账、支付等。为保障用户的资金安全,网银系统的安全性显得备受关注。本文将介绍网银系统的安全模型和架构设计,帮助网银系统的设计者在安全性方面做好把控。 安全模型 网银系统的安全模型分为身份认证、访问控制和数据保护三个部分。以下将分别介绍: 身份认证 身…

    database 2023年5月19日
    00
  • MySQL为JSON字段创建索引方式(Multi-Valued Indexes 多值索引)

    MySQL 5.7版本以后开始支持JSON数据类型,而JSON类型的字段数据是半结构化的数据。在使用半结构化字段类型的时候,针对这类字段的索引也就成为了必需的操作。 MySQL 提供了两种类型的 JSON 字段索引: Generated Columns Based on JSON Conditions Multi-Valued Indexes 本文主要介绍 …

    database 2023年5月22日
    00
  • sqoop export导出 map100% reduce0% 卡住的多种原因及解决

    前言 Sqoop是Hadoop生态圈中非常重要的工具之一,在Hadoop生态圈中起到了非常重要的作用。Sqoop主要用于在Hadoop集群(大数据环境)中处理和传输数据,被广泛应用于数据仓库构建、数据批量处理和数据迁移等领域。然而,在使用Sqoop的过程中,很容易遇到sqoop export导出 map100% reduce0% 卡住的状况,那么,这种现象到…

    database 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部