看什么看,还不快进来学习!!!
引言
在进行sql的执行效率优化过程中,可以根据mysql的执行计划的参数直观地感受优化的效果。在使用navicat对SQL语句进行分析时,可以看到一些参数(如下图所示),那么每个代表什么意思,如何通过这些参数来分析我们的SQL语句的执行效率是否进行了优化,下面我们将对每个参数进行解释,以及它们的值如何进行优化。
下面我们一一解释这些参数的含义以及通过他们的值如何进行SQL的优化判定
一、id
在 MySQL 的 Explain 执行计划中,每个执行计划节点的 ID 代表着查询语句中涉及的表的执行顺序。当多个表参与查询时,MySQL 会根据查询优化器的规则来确定表的连接顺序,并为每个表分配一个唯一的 id 值。较小的id值在执行计划中先进行处理,较大的id值表示稍后处理,都是1代表从上到下执行。
二、select_type
select_type 列代表了每个表的访问类型,用于表示查询语句中涉及到的表的类型和查询方式。
其中,select_type 列的值有以下几种可能:
- SIMPLE:表示查询语句中只包含了一个简单的表,没有使用 UNION 或子查询等复杂的查询方式。
- PRIMARY:表示查询语句中包含多个表,但是查询优化器将该表作为主查询(即外层查询)进行处理。
- SUBQUERY:表示查询语句中使用了子查询,子查询通常会在主查询之前先执行,并将结果传递给主查询。
- DERIVED:表示查询语句中使用了派生表(Derived Table),也就是将查询结果保存在临时表中,并在查询中引用该临时表。
- UNION:表示查询语句中使用了 UNION 操作符,将多个查询结果合并成一个结果集。
- UNION RESULT:表示查询语句中使用了 UNION 操作符后得到的结果集。
- DEPENDENT UNION:表示查询语句中使用了 UNION 操作符,并且依赖于外部查询的结果。
- DEPENDENT SUBQUERY:表示查询语句中使用了子查询,并且依赖于外部查询的结果。
- MATERIALIZED:表示查询语句中使用了 Materialized subquery,即对于子查询的结果集进行了优化,将其存储在一个临时表中以提高性能。</