sql or keyword optimize
更新日期:
文章目录
碰见一个sql执行慢的问题,优化后执行就比较快了,记录一下优化过程。
背景介绍
原始部分sql如下 (其中’2014-08-20 11:20:00’是变量传入进去的)
1 | SELECT '2014-08-20 11:20:00' as DataDate, A ,B, C,CreateTime,DeleteTime,UpdateTime FROM db.table1 WHERE |
当时sql执行慢,因此直接在CreateTime、DeleteTime、UpdateTime 这3个字段建索引。
效果还不错,其中慢的30个DB,好了28个。但是,还有2个 mysql 实例 仍旧慢。而且这2个Mysql实例是在一个物理机上的不同端口。
30分钟轮转一次,先A慢B快,后B慢A快,好神奇。想着是不是有什么计划任务在机器上跑,每30分钟一次?
了解到 由于是备库,因此机器差,加上主备同步的因素,因此慢了。而且还有个重要因素,看了一下sql的执行计划,发现没有走索引…为什么?
1 | id select_type table type possible_keys key key_len ref rows Extra |
是OR 关键字导致没走索引。因此把or 改成union,类似这样的sql
1 | SELECT '2014-08-20 11:20:00' as DataDate, A ,B, C,CreateTime,DeleteTime,UpdateTime FROM db.table1 WHERE |
只写了2个表,为了查看一下执行计划,走了范围索引,搞定了。
1 | id select_type table type possible_keys key key_len ref rows Extra |