Mysql高级篇(中)—— SQL性能分析
一、(了解)MySQL Query Optimizer 的主要功能和原理
MySQL Query Optimizer
是MySQL
用来决定如何高效执行SQL
查询的核心组件,它会基于查询的逻辑结构、表的统计信息、索引的使用等多种因素来选择最佳的执行计划
。理解Query Optimizer
的工作原理对于提高查询性能非常重要。
二、(了解)MySQL 常见瓶颈
MySQL
常见瓶颈 通常分为以下几个方面,涵盖了硬件资源、数据库配置、查询设计、以及并发处理
等问题。识别和解决这些瓶颈可以显著提高 MySQL 性能。
总结来说,MySQL
常见瓶颈通常与硬件资源(CPU、内存、磁盘)
、查询设计(索引、锁、事务)
以及数据库配置
相关。通过监控、分析执行计划、调整配置和优化查询
,可以有效解决这些瓶颈并提升数据库性能。
三、关键字 EXPLAIN
1、是什么
EXPLAIN
关键字是MySQL
中用于分析查询执行计划的工具
,帮助开发者了解查询语句是如何被优化器执行的
。通过EXPLAIN
,可以 获得关于表的访问顺序
、索引使用情况
、连接方式
等详细信息,从而有针对性地优化查询。
2、基本语法
EXPLAIN + SQL 语句
- 执行
EXPLAIN
后,MySQL
会输出一张表,显示查询各个部分的执行计划
。这个输出的结果可以帮助理解查询在数据库中的执行路径。
执行计划包含的信息
:
信息 | 作用简述 |
---|---|
id |
标识 查询中每个步骤的顺序 |
select_type |
标识 查询的类型,描述查询是简单查询、联合查询,还是子查询。 |
table |
表示查询中 正在访问的表 |
partitions |
显示查询涉及的表分区(如果有) |
type |
描述 MySQL 访问表的方式,反映 查询的效率 |
possible_keys |
列出查询中 可能使用的索引 |
key |
显示实际被优化器选择用于查询的索引 |
key_len |
表示 MySQL 使用的索引长度(单位为字节) |
ref |
显示 哪个字段或常量与索引列 进行比较 |
rows |
优化器估计需要读取的行数 |
filtered |
显示通过 WHERE 子句 过滤后的行百分比 (0-100%) |
Extra |
提供关于查询执行的额外信息 ,特别是某些性能影响因素的提示 |
3、EXPLAIN 执行信息详解
(1)id
在 MySQL
的 EXPLAIN
输出中,id
列用于表示查询的执行步骤和顺序
。对于复杂的查询,尤其是涉及多个子查询或联合查询时
,id
列能够帮助你理解 每个查询部分的执行流程及其依赖关系
。
==通过 `id` 的递增顺序,可以清楚地了解`查询的执行流程`,尤其是在`多表连接、子查询或联合查询`的情况下,帮助确定 `MySQL` 在执行查询时的`实际步骤和顺序`。这对查询优化特别重要,可以`帮助你识别哪些部分的查询是性能瓶颈或需要重构`的。==
(2)select_type
select_type
是帮助理解复杂查询执行方式的重要信息,它表明每个查询部分的类型
,通过分析select_type
,可以识别出查询中的子查询、联合查询、依赖查询
等类型,并结合索引和查询优化技术,提升查询性能
select_type值类型 | 简述 |
---|---|
SIMPLE |
没有子查询和联合(UNION )的简单查询 |
PRIMARY |
查询中最外层的查询 |
SUBQUERY |
子查询 |
DERIVED |
派生表 (即 FROM 子句中的子查询) |
|