hibernate查询query.list()返回结果速度很慢,请指点
public List acquierByType(int typeid)
{
Session s = null;
try
{
String SQL = "from JacArea as area where area.AreaTypeTableID =:typeid
and area.ValidFlag=1";
s = HibernateUtils.currentSession();
Query q = s.createQuery(SQL);
q.setInteger("typeid", typeid);
return q.list();
} catch (HibernateException e)
{
e.printStackTrace();
} finally
{
}
return null;
}
其中AreaTypeTableID是聚集索引,ValidFlag是索引,把查询语句直接在SQL server查询,速度很快没有问题,但当调用该函数的时候速度很慢,时间竟然达到3、4s,经过增加调试代码,发现就是return q.list()这句花费绝大部分时间,另外查询结果返回的数据不是很多,大概300条左右。因为我把返回结果用网页中的下拉框select显示,所以没有分页,但,我想300条结果也不应该这么慢吧。
请问应该怎么处理,大家遇到这样的问题了吗?
看网络上有人说用scroll()函数可以提高效率,可是关于ScrollableResults的用法在网上没有找到说明?后来看api但也不是很详细。还是不知道怎么处理。
我试着编了一下把return q.list()改写为以下代码,不过,我感觉我这个写法应该是有问题的,
下面代码中area是数据库返回的结果集的一个,ScrollalbeResults.get()得到area的各列。
ScrollableResults t=q.scroll();
while(t.next())
{
model.JacArea area = new model.JacArea();
area.setId(t.getInteger(0)); // 可是在运行的时候,提示参数空
area.setAreaName(t.getString(1));
area.setAreaTypeTableID((JacAreatype)t.get(2));
area.setAreaNameID(t.getString(3));
area.setValidFlag(t.getInteger(4));
l.add(area); //已经在函数开始声明为List类型
}
return l;
另外,我的应用是web,通过jsp网页显示该内容
请问上述问题应该怎么处理?十分感谢!!
1 楼 抛出异常的爱 2007-08-02 先打印不传到web上。。。。
分析一下。。。
用list返三百应该没什么问题。
你的表结构是怎么样的? 2 楼 desertriver 2007-08-02 十分感谢。
我的表结果比较简单,结构如下
属性IdAreaNameAreaTypeTableIdAreaNameIdValidFlag
类型intvarchar int varharint
长度4300 4 504
这个语句的时间为3-4s,但是由于网页有四个这样的语句,总共就henduoi时间了,因为参数AreaTypeTableId不同。
另外你说的先打印能否详细点。另外我就是上面的这个函数在java文件进行调试也这样费时间