当hibernate遇到不好的mysql索引选择时,该如何处理?

littleDuck 发布于 2013/11/19 15:08
阅读 912
收藏 0

项目维护的时候遇到了这个问题:

项目框架:ssh

数据库:mysql

mysql中有表[tb],里面有2个索引A、B,都是经常使用的

前几天项目的某个用户在某个网页需要十多秒才能响应,最终确定慢的原因是某条查询语句在mysql数据中查询花费近10秒的时间。。。

后来研究了下这条查询语句,发现最后那个group by tb.a条件影响了mysql的选择,当数据量较少的时候,mysql会选择B索引,可数据量大的时候,mysql却选择A索引。

不过检查发现使用A索引需要10秒,B索引5秒,如何在使用hibernate查询的时候,让mysql使用B索引呢?

(PS:其实B索引的5秒还是慢,因此为了优化此查询速度我设置了C索引,当使用force index(C)强制使用C索引【或使用ignore index(B)排除B索引】进行查询的时候,只需要花费0.3秒的时间就可以查询出结果了,本以为可以解决问题,但却发现如果不适用force index/ignore index的时候,Mysql就会选择A索引而hibernate使用hql生成的sql语句到mysql执行的时候,就出现了用到不好的索引的问题了该如何解决这个问题呢?


加载中
返回顶部
顶部