in 改写优化案例

l凌晨1点开发迁移业务告知sql响应有问题,赶紧爬起来看看

6000w的大表,没走索引导致查询了50s,执行计划如下

 desc select a, b, c, d from table where FIND_IN_SET(a,'MD5value1,MD5value2');
+----+-------------+------------+------+---------------+------+---------+------+----------+-------------+
| id | select_type | table      | type | possible_keys | key  | key_len | ref  | rows     | Extra       |
+----+-------------+------------+------+---------------+------+---------+------+----------+-------------+
|  1 | SIMPLE      | table | ALL  | NULL          | NULL | NULL    | NULL | 60435142 | Using where |
+----+-------------+------------+------+---------------+------+---------+------+----------+-------------+
1 row in set (0.01 sec)

使用了in导致查询没有走索引改写为union all sql秒出结果

select a, b, c, d from table where a='md5value1'
union all
select a, b, c, d from table where a='MD5value2';    

看下执行计划

+----+--------------+------------+-------+---------------+---------+---------+-------+------+-----------------+
| id | select_type  | table      | type  | possible_keys | key     | key_len | ref   | rows | Extra           |
+----+--------------+------------+-------+---------------+---------+---------+-------+------+-----------------+
|  1 | PRIMARY      | table | const | PRIMARY       | PRIMARY | 302     | const |    1 | NULL            |
|  2 | UNION        | table | const | PRIMARY       | PRIMARY | 302     | const |    1 | NULL            |
| NULL | UNION RESULT | <union1,2> | ALL   | NULL          | NULL    | NULL    | NULL  | NULL | Using temporary |
+----+--------------+------------+-------+---------------+---------+---------+-------+------+-----------------+
3 rows in set (0.03 sec)

 

 

转载于:https://www.cnblogs.com/weiwenbo/p/9257414.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值