`
swiftrui
  • 浏览: 2841 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

explain的语法

阅读更多
+—-+————-+——-+——-+——————-+———+———+——-+——+——-+
| id | select_type | table |type  |possible_keys    |key    | key_len |ref   | rows | Extra |
+—-+————-+——-+——-+——————-+———+———+——-+——+——-+

这些东西。

id:SELECT的识别符,这是SELECT的查询序列号。

select_type:SELECT类型,有以下几种不同的类型
    (1).SIMPLE:简单的SELECT(不使用UNION或子查询)
    (2).PRIMARY:最外面的SELECT,如果我们使用UNION或子查询,第一个查询将会是这个类型
    (3).UNION:使用UNION查询时,除第一个语句外的所有语句会返回这个类型
   (4).DEPENDENT UNION: UNION中的第二个或后面的SELECT语句,取决于外面的查询。
    (5).UNIONRESULT: UNION的结果。
   (6).SUBQUERY: 子查询中的第一个SELECT。
   (7).DEPENDENT SUBQUERY: 子查询中的第一个SELECT,取决于外面的查询。
   (8).DERIVED :衍生表会返回这个类型。如:select * from (select * from jos_content) as A;。

其中 table 表示是哪个表的数据。

type :表示表的连接类型,性能由好到差的类型类型为
(System(表中仅有一行,即常量表),
const(单表中最多有一个匹配行),
eq_ref(对于前面的每一行,在此表中只查询一条记录),
ref(使用普通的索引),
ref_or_null(和ref类似,但是条件中包含对于NULL查询),
index_merge(索引合并优化),
unique_subquery(in的后面是一个查询主键字段的子查询),
index_subquery(类似unique_subquery,主要是in的后面是查询非唯一索引字段的子查询),
range(单表中的范围查询),
index(对于当前的每一行,都通过查询索引来得到数据),
all(对于当前的每一行,都通过全表扫描来得到数据))

type比较重要。表示链接的类型。链接类型由好到坏的,依次是   system > const > eq_ref> ref > fulltext >ref_or_null > index_merge >unique_subquery > index_subquery >range > index > ALL

一般情况,至少要达到 range 级别,最好是 ref级别。否则可能会有性能问题。

possible_keys 是指可以应用到该表的索引,如果为NULL则没有。

key 是指用到的索引。

key_len是索引的长度,在不影响查询精度的情况下,值越小越好 。

ref 是指索引的那一列被使用了。一般会是个常数。

rows MYSQL认为必须检查的用来返回请求数据的行数。

extra 是指额外的信息。也是比较重要的 。

但这里可以看到的坏的例子是Using temporary和Usingfilesort,意思MYSQL根本不能使用索引,结果是检索会很慢

(1).Distinct
一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
(2).Not exists
MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行, 就不再搜索了
(3).Range checked for each
Record(index map:#)
没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一
(4).Using filesort
看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行
(5).Using index
列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候
(6).Using temporary
看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDERBY上,而不是GROUP BY上
(7).Using where
使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题
如果为 where used 说明使用了where语句。如果 type为 all 或者 index,一般会出现这样的结果。这样的问题,一般是查询需要改进。

在一般稍大的系统中,基本尽可能的减少join ,子查询等等。mysql就使用最简单的查询,这样效率最高。至于 join等,可以放在应用层去解决。
分享到:
评论

相关推荐

    Mysql Explain 语法详细解析

    ### MySQL Explain 语法详细解析 #### 一、Explain 的重要性和作用 在数据库管理和维护过程中,查询性能的优化是一项非常关键的任务。特别是在处理大量数据和复杂查询的情况下,查询优化可以显著提高系统的响应...

    从Mysql-EXPLAIN探寻数据库查询优化

    #### 一、EXPLAIN语法 `EXPLAIN`命令的基本语法有两种主要形式: 1. **`EXPLAIN tbl_name`**:与`DESCRIBE tbl_name`相同,用于显示表结构等信息,如字段名、数据类型等。 **示例**: ```sql EXPLAIN jos_...

    mysql 执行计划详解

    在`Explain语法.docx`和`mysqlexplain.ppt`这两个文档中,你将找到更详细的`EXPLAIN`使用教程和案例分析,包括如何解释不同类型的查询和优化策略。通过深入学习这些材料,你将能够更好地理解MySQL执行计划,并有效地...

    mysql5.1中文手册

    EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8....

    mysql数据库面试题.pdf

    SQL优化涉及EXPLAIN语法的使用,理解select_type、type、possible_key、ref、rows和extra等字段的含义,以及避免filesort和如何进行查询优化。对于大型数据集的查询,可能需要使用索引、分区或并行查询策略。 9. *...

    MySQL 5.1中文手冊

    7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化...

    MySQL 5.1参考手册 (中文版)

    7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化...

    mysql官方中文参考手册

    7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化...

    MYSQL中文手册

    7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL...

    MySQL 5.1参考手册中文版

    7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL...

    MySQL 5.1官方简体中文参考手册

    7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化...

    MySQL 5.1参考手册

    7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化...

    MySQL5.1参考手册官方简体中文版

    7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化...

    mysql优化利器之explain使用介绍

    一、EXPLAIN语法 在MySQL中,我们可以使用`EXPLAIN`关键字来查看查询执行计划。基本的语法结构如下: ``` EXPLAIN [explain_type] SELECT select_options ``` 这里,`explain_type`可以是`EXTENDED`或`PARTITIONS...

    MySql 5.1 参考手册.chm

    7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化...

    oracle explain plan总结

    基本语法如下: ```sql EXPLAIN PLAN [SET STATEMENT_ID [=] ] [INTO ] FOR ``` 其中: - `STATEMENT_ID` 是一个可选参数,用于标识执行计划。 - `TABLE_NAME` 是存储执行计划信息的目标表,默认为`plan_table`...

    Explain详解与索引最佳实践.pdf

    3. **查询结构调整**:优化 SQL 语法结构,如使用覆盖索引减少数据读取量。 #### 五、索引最佳实践 1. **创建覆盖索引**:确保索引包含所有查询所需的列,以避免额外的数据读取。 2. **使用最合适的索引类型**:...

Global site tag (gtag.js) - Google Analytics