mysql 重置表索引_mysql 索引优化 Explain的使用

索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本

MySQL提供了Explain,用于显示SQL执行的详细信息,可以进行索引的优化。

一,导致SQL语句执行慢的原因

1.硬件问题。如: 网络速度,内存不足,I/O吞吐量小,磁盘空间满了等。

2.没有索引 或者 索引失效。(表中某些数据被硬删除,会影响到索引,需要重建索引)

3.数据过多

4.服务器参数小,(重新设置my.cnf 表参数)

注意:  索引失效的情况有---> 条件中有 or ,like查询以 开头。

二,分析原因,找到切入点

1. 先观察, 开启慢查询日志,设置相应的阈值,在生产环境跑一天,(超过3s就是慢sql)

2.Explain和慢SQL分析; 如: SQL语句烂,索引没有或失效。关联查询过多等等。

3.Show Profile 是比 Explain更细节点

4.mysql 服务器参数调优,

三, Explain 分析

20200519103738261809.jpg

索引使用情况在  possible_keys、key和key_len三列 。

id  值越大越先被执行

table 查询涉及的表或者衍生表

select_type :

SIMPLE: 表示此查询不包含 UNION 查询或子查询

PRIMARY: 表示此查询是最外层的查询

SUBQUERY: 子查询中的第一个 SELECT

UNION: 表示此查询是 UNION 的第二或随后的查询

DEPENDENT UNION: UNION 中的第二个或后面的查询语句, 取决于外面的查询

UNION RESULT, UNION 的结果

DEPENDENT SUBQUERY: 子查询中的第一个 SELECT, 取决于外面的查询. 即子查询依赖于外层查询的结果.

DERIVED:衍生,表示导出表的SELECT(FROM子句的子查询)

type:

system: 表中只有一条数据, 这个类型是特殊的 const 类型。

const: 针对主键或唯一索引查询,只返回一条数据。速度非常快

eq_ref: 多表的 join 查询,效率比较高,两边表的数据量一样,一条对应一条。

ref: 多表的 join 查询,针对于非唯一或非主键索引,

range: 表示使用索引范围查询

index: 表示全索引扫描

ALL: 表示全表扫描,这个类型的查询是性能最差的查询之一。

性能关系:  ALL < index < range ~ index_merge < ref < eq_ref < const < system

possible_keysmysql 在查询时,可能使用到的索引

keymysql 在查询时 , 真正使用到的索引

key_len查询优化器使用了索引的字节数

ref 索引的哪个列被使用了

rows查询结果需要扫描读取的数据行数  (越小越好)

优化:

explain  查询后,查看SQL语句的type类型 , 索引是否使用。

20200519103738442480.jpg

20200519103738531351.jpg

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值