explain优化(索引优化)--------方法

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

explain优化sql


优化目的: 使用索引尽可能多的消除查询数据行

  

方法: explain 后跟select 语句。根据查询的结果中字段的值判断sql的好坏。 

例如: explain  select * from test;

结果如下:

mysql> explain  select * from student limit 1;

+----+-------------+---------+------+---------------+------+---------+------+------+-------+

| id | select_type | table   | type | possible_keys | key  | key_len | ref  | rows | Extra |

+----+-------------+---------+------+---------------+------+---------+------+------+-------+

|  1 | SIMPLE      | student | ALL  | NULL          | NULL | NULL    | NULL |    6 |       |

+----+-------------+---------+------+---------------+------+---------+------+------+-------+

1 row in set (0.00 sec)


我们主要关注4个参数: type、key、rows、extra


关注1:type

表示mysql在表中找到所需行的方式,又称“访问类型,常见类型如下:

由左到右依次为 由最差到最好,如图:


all index range index_subquery unique_subquery index_merge
最坏(全表扫描)






ref_or_null ref eq_ref const system




最好


system表仅有一行(=系统表)。这是 const 连接类型的一个特例。

constconst 用于用常数值比较 PRIMARY KEY 时。当 查询的表仅有一行时,使用 System。

eq_refconst 用于用常数值比较 PRIMARY KEY 时。当 查询的表仅有一行时,使用 System。

ref连接不能基于关键字选择单个行,可能查找 到多个符合条件的行。 叫做 ref 是因为索引要 跟某个参考值相比较。这个参考值或者是一 个常数,或者是来自一个表里的多表查询的 结果值。

ref_or_null如同 ref, 但是 MySQL 必须在初次查找的结果 里找出 null 条目,然后进行二次查找。

index_merge说明索引合并优化被使用了。

unique_subquery在某些 IN 查询中使用此种类型,而不是常规的 ref:value IN (SELECT primary_key FROM single_table WHERE some_expr)

index_subquery在 某 些 IN 查 询 中 使 用 此 种 类 型 , 与 unique_subquery 类似,但是查询的是非唯一 性索引: value IN (SELECT key_column FROM single_table WHERE some_expr)

range只检索给定范围的行,使用一个索引来选择 行。key 列显示使用了哪个索引。当使用=、 <>、>、>=、<、<=、IS NULL、<=>、BETWEEN 或者 IN 操作符,用常量比较关键字列时,可 以使用 range。

index全表扫描,只是扫描表的时候按照索引次序 进行而不是行。主要优点就是避免了排序, 但是开销仍然非常大。

all最坏的情况,从头到尾全表扫描。


关注2: key
一般来说要能达到range级别,最好能达到ref级别,否则就可能存在性能问题。

显示mysql在查询中实际使用的索引,没有则显示null


关注3: rows

表示mysql根据表统计信息以及索引选用情况,估算找到所需记录要读取的行数


关注4:extra

如果是only index, 这意味着信息用索引树中的信息检索出的,这比扫描整个表快。

如果是where used ,就是了where限制。

如果是impossible where 表示用不着where ,一般就是没查出来啥。

如果此信息显示Using filesort()或者 Using temporary(是用临时表)的话会很吃力,where和order by的索引经常无法兼顾,如果按照where来确定索引,那么order by时就会引起Using fileesort ,这就要看先过滤再排序,还是先排序再过滤了。


Using filesort表示 MySQL 会对结果使用一个外部索引排序,而不是从表里按索引次序读到相关内容。可能在内存或者磁盘上进行排序。MySQL 中无法利用索引完成的排序操作称为“文件排序”

Using temporary表示 MySQL 在对查询结果排序时使用临时表。常见于排序 order by 和分组查询 group by。

本文转自屌丝逆袭博客51CTO博客,原文链接http://blog.51cto.com/5731674/1704005如需转载请自行联系原作者

_追随我心
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 机器学习/深度学习 关系型数据库
最完整的Explain总结,SQL优化不再困难!
最完整的Explain总结,SQL优化不再困难!
|
6月前
|
SQL 关系型数据库 MySQL
explain是什么?explain优缺点及如何使用explain优化SQL
explain是什么?explain优缺点及如何使用explain优化SQL
161 1
|
6月前
|
SQL 算法 关系型数据库
从执行计划了解MySQL优化策略
从执行计划了解MySQL优化策略
82 0
从执行计划了解MySQL优化策略
|
SQL 存储 缓存
Mysql优化之explain你真的会吗?
Mysql优化之explain你真的会吗?
74 0
|
SQL 存储 关系型数据库
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(三)
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(三)
267 0
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(三)
|
SQL 存储 关系型数据库
几个必须掌握的SQL优化技巧(三):Explain分析执行计划
在应用的开发过程中,由于开发初期的数据量一般都比较小,所以开发过程中一般都比较注重功能上的实现,但是当完成了一个应用或者系统之后,随着生产数据量的急剧增长,那么之前的很多sql语句的写法就会显现出一定的性能问题,对生产的影响也会越来越大,这些不恰当的sql语句就会成为整个系统性能的瓶颈,为了追求系统的极致性能,必须要对它们进行优化。
297 0
几个必须掌握的SQL优化技巧(三):Explain分析执行计划
|
SQL 机器学习/深度学习 关系型数据库
explain | 索引优化的这把绝世好剑,你真的会用吗?(下)
explain | 索引优化的这把绝世好剑,你真的会用吗?(下)
explain | 索引优化的这把绝世好剑,你真的会用吗?(下)
|
SQL 监控 关系型数据库
explain | 索引优化的这把绝世好剑,你真的会用吗?(上)
explain | 索引优化的这把绝世好剑,你真的会用吗?(上)
explain | 索引优化的这把绝世好剑,你真的会用吗?(上)
|
SQL 关系型数据库 MySQL
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(一)
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(一)
205 0
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(一)