Mysql中EXPLAIN用法


用于查看sql语句的执行效率

EXPLAIN select a.userid,a.fromWhere,from_unixtime(b.registertime) 
from enewsmemberadd as a, enewsmember as b
where a.userid=b.userid and b.registertime between 1417773600 and 1418173200 AND b.checked=0


####select_type 
主要有这几种,
SIMPLE:这个是简单的sql查询,不使用UNION或者子查询
PRIMARY:子查询中最外层的select
UNION:UNION中的第二个或后面的SELECT语句
DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询
UNION RESULT:UNION的结果。
SUBQUERY:子查询中的第一个SELECT.
DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询
DERIVED:派生表的SELECT(FROM子句的子查询) 
#### table 输出行所引用的表
#### type 
##### system
表仅有一行(=系统表)。这是const联结类型的一个特例。
##### const
表有最多一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被剩下的优化器认为是常数。 const表很快,因为它们只读取一次!
##### eq_ref
对于每个来自于先前的表的行组合,从该表中读取一行。这可能是最好的联结类型,除了const类型。它用在一个索引的所有部分被联结使用并且索引是UNIQUE或PRIMARY KEY。
##### ref
对于每个来自于先前的表的行组合,所有有匹配索引值的行将从这张表中读取。
如果联结只使用键的最左面前缀,不或如果键不是UNIQUE或PRIMARY KEY(换句话说,如果联结能基于键值选择单个行的话),使用ref。如果被使用的键仅仅匹配一些行,该联结类型是不错的。
##### range
只有在一个给定范围的行将被检索,使用一个索引选择行。ref列显示哪个索引被使用。
##### index
这与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。
##### ALL
对于每个来自于先前的表的行组合,将要做一个完整的表扫描。
如果表格是第一个没标记const的表,这通常不好,并且通常在所有的其他情况下很差。你通常可以通过增加更多的索引来避免ALL,使得行能从早先的表中基于常数值或列值被检索出。


从上面可以发现,从上至下依次是越来越坏的结果,当然最好的还是Null,没有查询本表。




##### possible_keys
指出MySQL能使用哪个索引在该表中找到行
##### key
显示MySQL实际决定使用的键。如果没有索引被选择,键是NULL。
##### key_len
显示MySQL决定使用的键长度。如果键是NULL,长度是NULL。注意这告诉我们MySQL将实际使用一个多部键值的几个部分。
##### ref
显示哪个列或常数与key一起用于从表中选择行。
##### rows
显示MySQL相信它必须检验以执行查询的行数。
##### Extra
如果是Only index,这意味着信息只用索引树中的信息检索出的。通常,这比扫描整个表要快。
如果是where used,它意味着一个WHERE子句将被用来限制哪些行与下一个表匹配或发向客户。
如果是impossible where 表示用不着where
如果是Using filesort表示用到了文件排序,通常在数据量大的情况下,要减少这种查询

转载于:https://my.oschina.net/u/552729/blog/358072

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLEXPLAIN是一个用于分析查询语句执行计划的关键字。它可以帮助我们了解查询语句的执行过程,包括表的读取顺序、使用的索引以及连接方式等。通过使用EXPLAIN,我们可以更好地优化查询语句的性能。 要使用EXPLAIN,只需在查询语句前加上EXPLAIN关键字,然后执行该查询语句。例如,我们可以使用以下语句来分析一个查询语句的执行计划: EXPLAIN SELECT * FROM table_name WHERE condition; 执行该语句后,MySQL会返回一个结果集,其包含了查询语句的执行计划信息。这些信息包括了查询的执行顺序、使用的索引、连接方式以及其他一些重要的属性。 在MySQL,一些重要的属性包括: 1. id:表示查询的标识符,每个查询都有一个唯一的id。 2. type:表示查询的访问类型,常见的类型包括ALL(全表扫描)、index(索引扫描)、range(范围扫描)等。 3. key:表示查询使用的索引,如果没有使用索引,则为NULL。 4. ref:表示查询使用的连接条件,如果没有连接条件,则为NULL。 5. extra:表示额外的信息,例如使用了临时表、使用了文件排序等。 通过分析这些属性,我们可以了解查询语句的执行过程,从而进行性能优化。例如,如果type为ALL,表示进行了全表扫描,这可能会导致性能问题,我们可以考虑添加索引来优化查询。 总之,EXPLAINMySQL一个非常有用的工具,可以帮助我们分析查询语句的执行计划,从而优化查询性能。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [MySQLExplain用法详解](https://blog.csdn.net/weixin_44298615/article/details/121197559)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值