今天同事遇到一个奇怪的sql查询的问题:一条sql有时候执行素的很快(0.xxs),有时候执行很慢(20s+),不知道是什么问题.
猜测:1、是不是第一次执行,被mysql缓存了?后面几次直接拿缓存的结果。
2、是不是网络的原因?
3、索引使用的原因(探究后补充)
正常sql执行如下图:
执行快的时候:
执行慢的时候:
①于是开始第一次探索(sql执行不使用缓存):
sql 查询加上关键字 SQL_NO_CACHE
依然是相同的结果,时快,时慢。
②考虑是网络的问题,于是将sql转移到服务器本地执行,执行结果仍然与之前一致。
③那就看一下执行计划吧
第一次执行
执行多次之后,终于发现问题所在了:
mysql优化器根据他自己的优化算法会选择不同的索引,导致查询效率不一样。不过这次看起来不大聪明的样子。
调整:指定索引 FORCE INDEX(索引名称)
好啦,这下稳定输出啦。