如题:
数据库: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秒.
数据库: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秒.
JDBC更慢?是不是你哪里出错了?或者你是指查询到后再输出一次计算的时间?
JDBC理论上只会比Hibernate快的。更好的办法就是把5000变成如100,因为你真的需要一次取出5000条记录吗?
第一个问题:
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数据外,我想不到别的办法。
但我查询出来后还要给变量赋值,加上这过程JDBC就比HIBERNATE慢了。我试验多次了,但都没人相信。
我查的数据很多1.5W都有,可能是其它原因造成的。
2.你真的一次要查出这么多数据吗?是不是有大字段?尽量缩小的你的sql结果,因为取的数据太大,返回结果集比较大,这样也可能会慢,尽量缩小数据,我试过别的数据,jdbc比hibernate要快。