我是靠谱客的博主 满意大象,最近开发中收集的这篇文章主要介绍mysql 使用force index优化查询,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近查询数据库的时候发现,一个简单查询语句,添加一个条件以后,查询速度慢得不能接受,先直接看当时的情况。

数据库的数据量有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优化查询所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部