概述
最近查询数据库的时候发现,一个简单查询语句,添加一个条件以后,查询速度慢得不能接受,先直接看当时的情况。
数据库的数据量有1亿多条,数据量是比较大:
正常的查询语句,是比较快地查询出来,执行3个并列条件的语句,结果如下:
mysql> SELECT * FROM ActionLog_8001 where 1=1 and UserID = 20026 and UserLevel >= 1 and UserLevel <= 100 and LogDateTime >= '2016-04-23 14:47:03' and LogDateTime < '2016-04-27 14:47:03' order by LogDateTime desc;
可是,当我再并列查询多一个条件以后,并列查询ActionType,查询结果就完成另一个样了:
SELECT * FROM ActionLog_8001 where 1=1 and UserID = 20026 and ActionType = 2 and UserLevel >= 1 and UserLevel <= 100 and LogDateTime >= '2016-04-23 14:47:03' and LogDateTime < '2016-04-27 14:47:03' order by LogDateTime desc limit 0,1;
查询过程用了26秒多,完全出乎意料,同时因为这个问题导致网页超时。
先分析这种情况,首先,全部条件查询的字段都有索引,不然真不知道查到猴年马月了。
接着,能explain去分析对比查询语句。
两个查询语句的对比是这样的,连接类型,使用的key和优化查询的策略不一样。
这两个是导致查询慢的原因:使用了索引合并优化策略。
解决的办法是把UserID和ActionType两个条件用and的括号先并起来查询,强制使用UserID索引。
优化的结果还能接受的。
PS:感谢蔡淼同事的指点,在这问题上能得以容易解决。
在此记录一下整个问题的处理过程,以便以后有类似的问题发生容易查询。
最后
以上就是满意大象为你收集整理的mysql 使用force index优化查询的全部内容,希望文章能够帮你解决mysql 使用force index优化查询所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复