`
8366
  • 浏览: 812975 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

mysql explain语法解释

    博客分类:
  • DB
阅读更多

explain显示了mysql如 何使用索引来处理select语 句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

使用方法,在select语 句前加上explain就 可以了:

如:explain select surname,first_name form a,b  where  a.id=b.id

分析结果形式如下:

table

type

possible_keys

key

key_len

ref

rows

Extra

a

range

id

first_name

First_name

9

NULL

23112

Using where

Using temporary

Using filesort

 b

ref

id

first_name

id

4

id

2

Using where

 

EXPLAIN列的解释:

table

显示这一行的数据是关于哪张表的

type

 

这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为consteq_regrefrangeindexheALL

possible_keys

显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句

key

 

实际使用的索引。如果为NULL, 则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEXindexname)来强制使用一个索引或者用IGNORE INDEXindexname)来强制MYSQL忽 略索引

key_len

 

使用的索引的长度。在不损失精确性的情况下,长度越短越好

ref

 

显示索引的哪一列被使用了,如果可能的话,是一个常数

rows

 

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

Extra

 

 

关于MYSQL如何解析查 询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporaryUsing filesort, 意思MYSQL根本不能使用索引,结果是检索会很慢

 

extra列返回的描述的意义

Distinct

一旦MYSQL找到了与行 相联合匹配的行,就不再搜索了

Not exists

 

MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标 准的行,

就不再搜索了

Range checked for each

Recordindex map:#

 

没有找到理想的索引,因此对于从前面表中来的每一个

行组合,MYSQL检查使 用哪个索引,并用它来从表中返回行。

这是使用索引的最慢的连接之一

Using filesort

 

看到这个的时候,查询就需要优化了。MYSQL需 要进行额外的步骤

来发现如何对返回的行排序。它根据连接类型以及存储排序键值和

匹配条件的全部行的行指针来排序全部行

Using index

 

列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,

这发生在对表的全部的请求列都是同一个索引的部分的时候

Using temporary

 

看到这个的时候,查询需要优化了。

这里,MYSQL需要创建 一个临时表来存储结果,

这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY

Where used

 

使用了WHERE从句来限 制哪些行将与下一张表匹配或者是返回给用户。

如果不想返回表中的全部行,并且连接类型ALLindex,这就会发生,

或者是查询有问题

 

不同连接类型的解释(按照效率高低的顺序 排序)

system

表只有一行:system表。 这是const连接类型的特殊情况

const

 

表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。因为只有 一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待

eq_ref

 

在连接中,MYSQL在查 询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用

ref

 

这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利 用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少越少越好

range

 

这个连接类型使用索引返回一个范围中的行,比如使用><查找东西时发生的情况

index

 

这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)

ALL

 

这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免

分享到:
评论

相关推荐

    Mysql Explain 语法详细解析

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

    mysql语法手册-mysql语法手册-mysql语法手册-mysql语法手册

    MySQL语法手册是学习和理解MySQL操作的重要参考资料,涵盖了从基本的查询到复杂的存储过程等所有方面。 一、SQL基础 SQL是用于管理关系数据库的语言,MySQL语法手册首先会介绍SQL的基础概念,包括数据类型(如整数...

    Mysql Explain详细解析

    ### MySQL EXPLAIN 详解 #### 一、EXPLAIN 概述 MySQL 的 `EXPLAIN` 命令是一个非常强大的工具,它可以帮助我们理解 MySQL 如何执行查询,并为我们提供优化查询性能的重要信息。通过 `EXPLAIN`,我们可以了解查询...

    mysql高级语法教学

    MySQL是一种广泛使用的开源关系型数据库管理系统,其高级语法是数据库管理员和开发人员必备的技能之一。本教程将深入探讨MySQL的高级特性,帮助你提升在数据处理和查询优化方面的专业能力。 1. **子查询与联接操作*...

    MySQL语法 Dos下的所有语法

    还有其他重要的MySQL命令和概念,如创建数据库(`CREATE DATABASE`)、删除数据库(`DROP DATABASE`)、创建表(`CREATE TABLE`)、修改表结构(`ALTER TABLE`)、插入数据(`INSERT INTO`)、更新数据(`UPDATE`)...

    mysql explain详解

    ### `EXPLAIN`语法 `EXPLAIN`命令通常跟在SELECT语句前,用来查看MySQL如何执行SQL查询,其基本格式如下: ```sql EXPLAIN SELECT column1, column2 FROM table_name WHERE condition; ``` ### `EXPLAIN`输出解释 `...

    mysql操作和语法

    本文将深入探讨MySQL的操作与语法,旨在帮助读者理解和掌握在MySQL环境中进行数据库管理和数据操作的关键技巧。 一、MySQL安装与配置 安装MySQL通常涉及下载适合您操作系统的二进制文件,然后按照安装向导的步骤...

    Mysql Explain 详解.docx

    一、`EXPLAIN`基本语法 `EXPLAIN`命令的基本格式是:`EXPLAIN SELECT ...`,将你要分析的SQL查询语句放在后面。例如: ```sql EXPLAIN SELECT * FROM t3 WHERE id = 3952602; ``` 这将返回一个表格,显示查询执行的...

    Mysql Explain 详细介绍

    MySQL的EXPLAIN命令是数据库管理员和开发者用于优化SQL查询性能的重要工具。它提供了一种查看MySQL如何执行SELECT语句的方法,帮助我们理解查询计划、索引使用情况以及潜在的性能瓶颈。下面是对MySQL EXPLAIN的详细...

    Mysql中explain的说明

    ### MySQL中EXPLAIN命令详解 #### 一、概述 在MySQL数据库管理中,查询优化是一项非常重要的工作。通过优化查询,不仅可以提升查询速度,还能节省系统资源,提高系统的整体性能。`EXPLAIN`命令作为MySQL提供的一种...

    MySQL语法大全

    本文将深入探讨MySQL的语法大全,旨在帮助读者掌握MySQL的基础知识及高级特性,实现高效的数据存储和管理。 一、安装与配置 在开始学习MySQL语法之前,你需要在计算机上安装MySQL。这通常涉及下载安装包,配置...

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

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

    2021年MySQL高级教程视频.rar

    10.MySQL高级索引索引语法.avi 11.MySQL高级索引索引设计原则.avi 12.MySQL高级视图概述.avi 13.MySQL高级视图创建及修改视图.avi 14.MySQL高级视图查看及删除视图.avi 15.MySQL高级存储过程概述.avi 16.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 参考手册.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如何优化...

    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 explain获取查询指令信息原理及实例

    mysql&gt; explain select 1; +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+ | id | select_type | table | partitions | type | ...

Global site tag (gtag.js) - Google Analytics