MySQL Slow Query EXPLAIN

1. EXPLAIN的用法

EXPLAIN是MySQL的一个关键字,当在SELECT语句前加上该关键字,即可知道:MySQL是如何执行SQL查询的,如:查询时是否正确使用索引,MySQL是否采用最优的表连接。

2. EXPLAIN输出的列信息

字段 描述
id SQL语句执行的顺序
select_type SELECT的类型
table 查询出的行所用的表
type 连接类型
possible_keys 可能使用的索引
key 实际使用的索引
key_len 使用的索引的长度
ref 使用哪一列或常数与索引进行比较
rows 估计需要查找的条数
extra My解决查询的详细信息
3 .字段extra

该列输出MySQL如何解析查询的附加信息。要想让查询尽可能的快,当该列的值出现 Using filesort 和 Using temporary时,请注意优化。

Using filesort: 通常发生排序的列没有用上索引,导致全表检索。

ex:explain select * from s_order order by pay_out_sn;


Using temporary: 为了解析查询,MySQL需要创建一个临时表来保存记录。这种情况经常发生在group by 和 order by作用在不同列上。

ex:explain select * from s_order group by seller_id order by buyer_id;

4.优化案例

优化前:explain select * from s_order where order_id in (select order_id from s_order_goods where buyer_id=10);
优化后:explain select o.* from s_order as o join (select order_id from s_order_goods where buyer_id=10)  as oid on oid.order_id=o.order_id ;

优化using filesort

查询用户商品评论,根据geval_showtime排序,尽管geval_showtime定义了索引,可是MySQL优化器采用了其它索引.

优化方法:from  evalute_goods left join ....  => from  evalute_goods use_index(geval_showtime) left join...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值