如题:
数据库:sqlserver 2000 所有条件都创建索引。
我有一sql语句如下:
select top 5000 列1,列2,列3,列4,列5from table where 条件1 = ? and 条件2=?(条件个数不固定,最少一个,最多五个)
直接在查询分析器里执行:执行时间最多就3秒左右。用hibernate执行最少10秒以上(jdbc更慢),请问是什么原因,有什么解决办法没程序如下:
long start = System.currentTimeMillis();
List<Object[]> smList = session.createSQLQuery(querySql).list();
long end = System.currentTimeMillis(); 
log.info("查询时间:"+(end-start));
就这样也得上10秒.

解决方案 »

  1.   

    直接执行,在终端里把查到的数据输出,这个不会花很多时间,尤其是Linux,Mac下终端输出的速度非常快,Windows下会慢一些。在Hibernate里慢,是因为查到5000条记录,要使用反射生成5000个对象,当然会慢很多。
    JDBC更慢?是不是你哪里出错了?或者你是指查询到后再输出一次计算的时间?
    JDBC理论上只会比Hibernate快的。更好的办法就是把5000变成如100,因为你真的需要一次取出5000条记录吗?
      

  2.   

    jdbc比hibernate慢,一般是你的sql有问题。
      

  3.   

    sqlserver查询分析器里真的一下子把全部5000条结果都显示给你了吗?还是只显示了5000条里的第一页(比如100条)?
      

  4.   

    Inhibitory
    第一个问题:
    JDBC更慢?是不是你哪里出错了?
    long startTime = System.currentTimeMillis();
    PreparedStatement ps = con.prepareStatement(sql); 
    ResultSet rs = ps.executeQuery(); 
    long endTime = System.currentTimeMillis();
    System.out.println("jdbc查询时间:"+(endTime-startTime));sql:
    select top 15000 xxxx from  table where  条件1 = '上海' order by 列1 desc
    第二个问题:
    5000变成如100,这个改变不了。最多时候需要取1.5w,

    现在运行真的很慢有时候要50秒左右,如果真的要把5000变为100(10也行),我除了用计时器去取1.5W数据外,我想不到别的办法。
      

  5.   

    看到 用hibernate执行最少10秒以上(jdbc更慢) 就不想回复了。
      

  6.   

    大家共同一致的认为,JDBC绝对不可能比用hibernate更慢,你直接执行,是直接操作数据库,当然快,你用JDBC,有一道封装,会慢一点,用hibernate肯定还要慢一点,因为它又要进行一些相关处理,其实它也是用JDBC。只是参差不同罢了。
      

  7.   

    光查询JDBC是要快一点我试了。
    但我查询出来后还要给变量赋值,加上这过程JDBC就比HIBERNATE慢了。我试验多次了,但都没人相信。
    我查的数据很多1.5W都有,可能是其它原因造成的。
      

  8.   

    1.jdbc肯定比hibernate快,因为hibernate的查询是对jdbc的封装
    2.你真的一次要查出这么多数据吗?是不是有大字段?尽量缩小的你的sql结果,因为取的数据太大,返回结果集比较大,这样也可能会慢,尽量缩小数据,我试过别的数据,jdbc比hibernate要快。
      

  9.   

    HIBERNATE 用反射赋值,能比直接赋值快???