解决方案 »

  1.   

    确定是程序执行这条sql语句要160多秒,不是其它原因?
      

  2.   


    确定!因为日志输出是这样的
    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多秒.......
      

  3.   

    不太清楚
    http://www.myexception.cn/sql/897236.html
    看看这篇文章能不能帮到你
      

  4.   


    按照你说的改动了下,还是很慢,控制台输出结果:
    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
      

  5.   

    直接把sql贴到数据库里直接跑,看看耗时。这160秒不太可能是查询时间
      

  6.   


    贴到sqldeveloper里跑,不到3秒就出结果了!!!
      

  7.   

    肯定是哪里搞错,好好检查下,把mybatis里的sql改成select 1 from dual试试,时间差距这么大肯定不是什么效率问题。
      

  8.   

    又没有加索引什么的呀,哪那条语句拿出来,加上explain看下执行计划
      

  9.   

    尝试不用to_date()函数
    把日期参数String改成Date类型试试
      

  10.   

     to_date(#{startTime},'yyyy-MM-DD')    这样的函数根本就使用不到索引..当然慢的拉...
    要使用 >=   或者<=的方法才行....
    可以参考
    paip.取当天记录的方法sql跟hql hibernate
      

  11.   

    楼主这种情况应该是出在mybatis对你这个sql的解析上浪费了太多时间,毕竟你这个sql放到数据库去查很快,而mybatis却很慢,说明不是这个sql的问题而是你写在mybatis xml文件里面的问题。我看楼主这个sql写在xml里用了&gt;=和&lt;=不要这么用。你用
    <![CDATA[]]>把你的sql包起来里面直接用<=和>=试试
      

  12.   

    我估计是返回的数据记录太多导致的,sqldeveloper默认返回前面一些数据,而你用mybatis返回了所有记录,你用sqldeveloper往后拖,返回所有记录肯定也会很慢的。
    核心问题就在用了to_date函数后,导致不能走索引了。
    解决方法是不用函数,或者建立一个函数索引,或者返回部分数据。