explain mysql 调优_EXPLAIN mysql性能调优

解释:获得mysql如何执行查询的信息

id :SELECT识别符

select_type:SELECT类型

SIMPLE简单的 SELECT (没有使用 UNION 或子查询)

PRIMARY最外层的 SELECT。

UNION第二层,在SELECT 之后使用了 UNION 。

DEPENDENT UNIONUNION 语句中的第二个 SELECT,依赖于外部子查询

UNION RESULTUNION的结果

SUBQUERY子查询中的第一个SELECT

DEPENDENT SUBQUERY子查询中的第一个SELECT,取决于外面的查询

DERIVED导出表的SELECT(FROM子句的子查询) table:记录查询引用的表

type:表连接类型。

以下列出了各种不同类型的表连接,依次是从最好的到最差的:

system(表只有一行记录(等于系统表)。这是 const 表连接类型的一个特例)

>const const

const 用于在和 PRIMARY KEY 或 UNIQUE 索引中有固定值比较的情形。

下面的几个查询中,tbl_name 就是 const 表了:

SELECT * FROM tbl_name WHERE primary_key=1;

SELECT * FROM tbl_name WHERE primary_key_part1=1 AND primary_key_part2=2;

>eq_ref

它用在索引所有部分都用于做连接并且这个索引是一个 PRIMARY KEY 或 UNIQUE 类型

>ref

ref 用于连接程序使用键的最左前缀或者是该键不是 PRIMARY KEY 或 UNIQUE 索引,这也是个不错的连接类型

(程序无法根据键值取得唯一记录)

>ref_or_null

这种连接类型类似 ref,不同的是MySQL会在检索的时候额外的搜索包含 NULL 值的记录

> index_merge

> unique_subquery> index_subquery > range

range 用于将某个字段和一个定植用以下任何操作符比较时 =, <>, >, >=, , BETWEEN, 或 IN

> index

连接类型跟 ALL 一样,不同的是它只扫描索引树,通常索引树比表数据小  > all

possible_keys :

key    key_len

ref ef 字段显示了哪些字段或者常量被用来和 key 配合从表中查询记录出来

rows

Extra:

Distinct

MySQL当找到当前记录的匹配联合结果的第一条记录之后,就不再搜索其他记录了。

Not exists

MySQL在查询时做一个 LEFT JOIN 优化时,当它在当前表中找到了和前一条记录符合 LEFT JOIN 条件后,

就不再搜索更多的记录了。下面是一个这种类型的查询例子:

SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.id

WHERE t2.id IS NULL;

Using filesort

MySQL需要额外的做一遍从而以排好的顺序取得记录。排序程序根据连接的类型遍历所有的记录,并且将所有符合

WHERE 条件的记录的要排序的键和指向记录的指针存储起来。这些键已经排完序了,对应的记录也会按照排好的顺序取出来。

Using index

字段的信息直接从索引树中的信息取得,而不再去扫描实际的记录。这种策略用于查询时的字段是一个独立索引的一部分

Using temporary

MySQL需要创建临时表存储结果以完成查询。这种情况通常发生在查询时包含了GROUP BY 和 ORDER BY 子句,

它以不同的方式列出了各个字段

如果你想要让查询尽可能的快,那么就应该注意 Extra 字段的值为Using filesort 和 Using temporary 的情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值