`
jacky2007
  • 浏览: 169214 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

sql执行效率检测 mysql explain

阅读更多


转自:http://www.phpweblog.net/richard-dong/archive/2008/12/15/6173.aspx



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

EXPLAIN列的解释:



table

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



type

这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL



possible_keys

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



key


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



key_len

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



ref

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



rows

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



Extra

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









extra列返回的描述的意义



Distinct

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



Not exists

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



就不再搜索了



Range checked for each



Record(index map:#)

没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一



Using filesort

看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行



Using index

列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候



Using temporary

看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上



Where used

使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题









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



system

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



const

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



eq_ref

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



ref

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



range

这个连接类型使用索引返回一个范围中的行,比如使用>或

 

分享到:
评论

相关推荐

    SQL优化和SQL执行分析工具Explain的使用详解和示例

    Explain工具是MySQL数据库提供的用于分析SQL执行计划的一种工具。通过Explain,我们可以在不执行SQL的情况下获取到关于SQL执行方式的信息,这对于理解和优化SQL查询非常有帮助。 #### 三、Explain基本使用方法 ...

    SQL语句性能分析之explain

    在PHPMyAdmin或其他MySQL客户端中执行SQL语句时,只需在查询语句前添加`EXPLAIN`即可。例如: ```sql EXPLAIN SELECT focus_uid FROM user_focus WHERE uid = xxx; ``` 这将会返回一系列关于查询执行计划的信息,...

    mysqlexplain.ppt

    MySQL的EXPLAIN命令是数据库管理员和开发者用来分析SQL查询执行计划的重要工具。它能帮助我们理解MySQL如何处理查询,从而优化查询性能。以下是对EXPLAIN命令及其相关知识点的详细解释。 1. **EXPLAIN调用方式**: ...

    sql查询优化(提高MySQL数据库查询效率的几个技巧)

    * 优化 SQL 语句:使用 EXPLAIN 语句来分析 SQL 语句的执行计划,优化查询语句。 * 使用存储过程:使用存储过程可以将频繁查询的操作封装起来,提高查询效率。 * 优化数据库结构:优化数据库结构,例如,使用合适的...

    Mysql Explain

    在数据库查询优化领域,`EXPLAIN` 是一个非常强大的工具,它能够帮助我们分析 `SELECT` 语句的执行过程,揭示出查询效率低下的原因。通过 `EXPLAIN` 的分析结果,我们可以针对性地对查询语句进行优化,从而使查询...

    100 透彻研究通过explain命令得到的SQL执行计划(1).pdf

    本文将详细探讨通过explain命令获得的SQL执行计划中包含的各种元素,以便于理解每个部分所代表的具体含义。 首先,当运行explain命令之后,你会得到一个执行计划,这个计划中包含了多个字段,它们分别是id、select_...

    MySQL explain 笔记整理

    ### MySQL EXPLAIN 笔记整理 #### 一、EXPLAIN 命令简介 ...总之,`EXPLAIN` 工具是优化 MySQL 性能的强大武器,通过对执行计划的深入分析,可以有效地提升数据库查询效率,进而提高整个应用程序的性能。

    106 透彻研究通过explain命令得到的SQL执行计划(7).pdf

    在研究SQL语句的执行计划时,"explain命令"是一个非常重要的工具。通过explain命令可以得到SQL语句的执行计划,从而帮助我们了解SQL语句是如何被执行的。执行计划里面包含了多个字段,这些字段共同描述了查询的各个...

    MySQL数据库优化SQL篇PPT课件.pptx

    执行计划可以通过EXPLAIN语句来查看。 二、SELECT语句优化 SELECT语句是MySQL数据库中最常用的语句之一。SELECT语句的优化是非常重要的。通过优化SELECT语句,可以提高数据库的性能和效率。 三、IN和EXIST语句 ...

    mysql数据库sql优化

    ### MySQL数据库SQL优化 #### 一、SQL优化 在MySQL数据库管理中,SQL查询的性能直接影响到系统的响应时间和资源消耗。通过合理的SQL优化,可以显著提高数据处理速度,降低服务器负载,提升用户体验。 ##### 1.1 ...

    mysql的explain分析sql语句性能(慢查询和加没加索引)

    MySQL 的 Explain 分析 SQL 语句性能(慢查询和加没加索引) MySQL 的 Explain 分析 SQL 语句性能是数据库性能优化的重要工具之一。通过 Explain 命令可以分析 SQL 语句的执行计划,了解 SQL 语句的执行过程,找出...

    MYSQL EXPLAIN详解

    ### MySQL EXPLAIN详解 #### 一、EXPLAIN简介 **EXPLAIN** 是 MySQL 提供的一个非常有用的工具,它能够帮助用户了解 MySQL 如何...通过深入研究 EXPLAIN 的输出,可以显著提高 MySQL 数据库的应用效率和响应速度。

    MySQL开发者SQL权威指南_MYSQL_

    7. **存储过程与函数**: 存储过程是一组预编译的SQL语句,可提高代码复用性和执行效率。函数则是在查询中可以直接调用的预定义操作,如内置数学函数、字符串函数和日期时间函数。 8. **触发器**: 触发器是响应特定...

    Mysql Explain 语法详细解析

    - **发现低效查询**:EXPLAIN 能够帮助我们快速定位那些执行效率低下的 SQL 语句,如不必要的全表扫描、索引使用不当等。 - **改进查询**:基于 EXPLAIN 提供的信息,我们可以对 SQL 语句进行调整,比如添加合适的...

    查询mysql中执行效率低的sql语句的方法

    在MySQL数据库管理中,识别和优化执行效率低的SQL语句是提高系统性能的关键环节。以下是一些关于如何查询和优化这些低效SQL语句的方法。 1. **记录低效SQL语句**: - 通过设置启动参数`–log-slow-queries`,可以...

    提升MYSQL查询效率的10个SQL语句优化技巧.doc

    以下是十个 SQL 语句优化技巧来提升 MYSQL 查询效率: 1. 优化 MySQL 查询缓存 MySQL 查询缓存可以启用高速查询缓存,让数据库引擎在后台悄悄的处理是提高性能的最有效方法之一。当同一个查询被执行多次时,如果...

    mysql explain详解1

    MySQL的EXPLAIN命令是数据库管理员和开发者用来分析SQL查询执行计划的重要工具,它能帮助我们理解MySQL如何使用索引来处理SELECT语句,并优化查询性能。本文将深入解析EXPLAIN输出的各项参数,以便更好地理解和优化...

    MySql中如何使用 explain 查询 SQL 的执行计划

    总结来说,`EXPLAIN`是MySQL性能调优的重要工具,通过深入理解执行计划,我们可以更好地优化SQL查询,提高数据库的运行效率。熟练掌握`EXPLAIN`的使用,能够帮助我们避免不必要的全表扫描,利用索引提高查询速度,...

Global site tag (gtag.js) - Google Analytics