mybatis查询日期范围速度慢的原因 mybatissqlselect 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 确定是程序执行这条sql语句要160多秒,不是其它原因? 确定!因为日志输出是这样的14:48:12,101 DEBUG PreparedStatement:27 - ==> Executing: SELECT * FROM server_log s WHERE (s.createTime >= to_date(?,'yyyy-MM-DD') and s.createTime <= to_date(? ,'YYYY-MM-DD')) AND appSerialNumber=? ORDER BY ? 14:48:12,101 DEBUG PreparedStatement:27 - ==> Executing: SELECT * FROM server_log s WHERE (s.createTime >= to_date(?,'yyyy-MM-DD') and s.createTime <= to_date(? ,'YYYY-MM-DD')) AND appSerialNumber=? ORDER BY ? 14:48:12,101 DEBUG PreparedStatement:27 - ==> Parameters: 2014-07-02(String), 2014-08-01(String), 0002(String), createTime(String)14:48:12,101 DEBUG PreparedStatement:27 - ==> Parameters: 2014-07-02(String), 2014-08-01(String), 0002(String), createTime(String)然后160多秒后出现14:50:43,439 DEBUG Connection:27 - xxx Connection Closed用断点也跟过了,就是在session.selectList()这行等了160多秒....... 不太清楚http://www.myexception.cn/sql/897236.html看看这篇文章能不能帮到你 按照你说的改动了下,还是很慢,控制台输出结果:15:11:03,853 DEBUG Connection:27 - ooo Connection Opened15:11:03,890 DEBUG PreparedStatement:27 - ==> Executing: SELECT * FROM server_log s WHERE (s.createTime >= to_date('2014-07-02 00:00:00','yyyy-mm-dd hh24:mi:ss') and s.createTime <= to_date('2014-08-01 23:59:59' ,'yyyy-mm-dd hh24:mi:ss')) AND appSerialNumber=0002 ORDER BY createTime 15:11:03,890 DEBUG PreparedStatement:27 - ==> Executing: SELECT * FROM server_log s WHERE (s.createTime >= to_date('2014-07-02 00:00:00','yyyy-mm-dd hh24:mi:ss') and s.createTime <= to_date('2014-08-01 23:59:59' ,'yyyy-mm-dd hh24:mi:ss')) AND appSerialNumber=0002 ORDER BY createTime 15:11:03,891 DEBUG PreparedStatement:27 - ==> Parameters: 15:11:03,891 DEBUG PreparedStatement:27 - ==> Parameters: 15:13:37,193 DEBUG Connection:27 - xxx Connection Closed 直接把sql贴到数据库里直接跑,看看耗时。这160秒不太可能是查询时间 贴到sqldeveloper里跑,不到3秒就出结果了!!! 肯定是哪里搞错,好好检查下,把mybatis里的sql改成select 1 from dual试试,时间差距这么大肯定不是什么效率问题。 又没有加索引什么的呀,哪那条语句拿出来,加上explain看下执行计划 尝试不用to_date()函数把日期参数String改成Date类型试试 to_date(#{startTime},'yyyy-MM-DD') 这样的函数根本就使用不到索引..当然慢的拉...要使用 >= 或者<=的方法才行....可以参考paip.取当天记录的方法sql跟hql hibernate 楼主这种情况应该是出在mybatis对你这个sql的解析上浪费了太多时间,毕竟你这个sql放到数据库去查很快,而mybatis却很慢,说明不是这个sql的问题而是你写在mybatis xml文件里面的问题。我看楼主这个sql写在xml里用了>=和<=不要这么用。你用<![CDATA[]]>把你的sql包起来里面直接用<=和>=试试 我估计是返回的数据记录太多导致的,sqldeveloper默认返回前面一些数据,而你用mybatis返回了所有记录,你用sqldeveloper往后拖,返回所有记录肯定也会很慢的。核心问题就在用了to_date函数后,导致不能走索引了。解决方法是不用函数,或者建立一个函数索引,或者返回部分数据。 SQLserver2000数据库连接!!求解 老是出错啊!!我的补丁是SP4的 hql的问题,帮忙解决下 200分急求配套光盘《轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发(含光盘1张)》 struts2对action中的属性注入问题 应用服务器与WEB SERVER的区别 想从事java开发,应该考哪些证? weblogic本地调试,使用localhost和本机地址的区别 java中jdbc 带参数的查询 图片数据恢复问题。500分相送 如何找最接近的对象? java新手,学习的时候遇见的一些问题,求大神帮忙解答 java判断是否为数组类型
确定!因为日志输出是这样的
14:48:12,101 DEBUG PreparedStatement:27 - ==> Executing: SELECT * FROM server_log s WHERE (s.createTime >= to_date(?,'yyyy-MM-DD') and s.createTime <= to_date(? ,'YYYY-MM-DD')) AND appSerialNumber=? ORDER BY ?
14:48:12,101 DEBUG PreparedStatement:27 - ==> Executing: SELECT * FROM server_log s WHERE (s.createTime >= to_date(?,'yyyy-MM-DD') and s.createTime <= to_date(? ,'YYYY-MM-DD')) AND appSerialNumber=? ORDER BY ?
14:48:12,101 DEBUG PreparedStatement:27 - ==> Parameters: 2014-07-02(String), 2014-08-01(String), 0002(String), createTime(String)
14:48:12,101 DEBUG PreparedStatement:27 - ==> Parameters: 2014-07-02(String), 2014-08-01(String), 0002(String), createTime(String)然后160多秒后出现
14:50:43,439 DEBUG Connection:27 - xxx Connection Closed用断点也跟过了,就是在session.selectList()这行等了160多秒.......
http://www.myexception.cn/sql/897236.html
看看这篇文章能不能帮到你
按照你说的改动了下,还是很慢,控制台输出结果:
15:11:03,853 DEBUG Connection:27 - ooo Connection Opened
15:11:03,890 DEBUG PreparedStatement:27 - ==> Executing: SELECT * FROM server_log s WHERE (s.createTime >= to_date('2014-07-02 00:00:00','yyyy-mm-dd hh24:mi:ss') and s.createTime <= to_date('2014-08-01 23:59:59' ,'yyyy-mm-dd hh24:mi:ss')) AND appSerialNumber=0002 ORDER BY createTime
15:11:03,890 DEBUG PreparedStatement:27 - ==> Executing: SELECT * FROM server_log s WHERE (s.createTime >= to_date('2014-07-02 00:00:00','yyyy-mm-dd hh24:mi:ss') and s.createTime <= to_date('2014-08-01 23:59:59' ,'yyyy-mm-dd hh24:mi:ss')) AND appSerialNumber=0002 ORDER BY createTime
15:11:03,891 DEBUG PreparedStatement:27 - ==> Parameters:
15:11:03,891 DEBUG PreparedStatement:27 - ==> Parameters:
15:13:37,193 DEBUG Connection:27 - xxx Connection Closed
贴到sqldeveloper里跑,不到3秒就出结果了!!!
把日期参数String改成Date类型试试
要使用 >= 或者<=的方法才行....
可以参考
paip.取当天记录的方法sql跟hql hibernate
<![CDATA[]]>把你的sql包起来里面直接用<=和>=试试
核心问题就在用了to_date函数后,导致不能走索引了。
解决方法是不用函数,或者建立一个函数索引,或者返回部分数据。