1.where有索引,查询却奇慢
首先去掉order by ,group by 这类的函数.
分析sql explain ,看是否查询是走的索引.
如果查询走的索引与where 条件的索引不一致,应该就是mysql策略优化的问题.这时候,需要修改sql.让查询走where字段的索引.
explain SELECT * FROM log where 1 =1 and log.share_free = 7 and log.create_time >= '2018-6-27 1:25:52' and log.create_time <= '2018-6-27 16:25:45' order by log.id desc limit 0,20 ;
这里可以看出,查询使用的是主键作为索引,但是where里面并没有主键的条件.所以这时候查询就会变得很慢很慢.
下面修改为order by create_time
explain SELECT * FROM tj_look_log log where 1 =1 and log.share_free = 7 and log.create_time >= '2018-6-27 1:25:52' and log.create_time <= '2018-6-27 16:25:45' order by log.create_time desc limit 0,20 ;
这里可以看出,使用的是create_time 作为查询的索引,而且查询的时候,采用索引+where条件.这样查询速度成倍上升.
如果查询的条件有索引的情况下,尽量让查询走索引.多个索引的情况下,查询范围小的应该优先走索引.