其神若何,月射寒江。

hibernate查询的性能思考

上一篇 / 下一篇  2010-09-03 10:36:48 / 个人分类:性能测试

 
hibernate查询的性能思考

无论是延迟加载还是立即加载,主对象的每个关联属性都会执行一条sql去取数据。

如果要查询显示的数据主表的数据行非常多,还是无法避免频繁的执行sql.

一个对象n个关联属性,有m行数据,就会有1+n*msql.

所以在列表显示的中不合适使用该方式,可以考虑采用联合查询,一条sql就完成。

 

采用联合查询的依据:

 取同样的数据,执行的sql越多越耗资源。

 提取数据,列数越少越好,所以只提取要显示的列

适用场合:

  在列表显示中,显示的行数比较多,如果关联属性比较多最好用关联查询。否则执行过多的sql势必影响性能。

  同时指定提取要用的列,可以提高性能。

 

提取部分列带来的问题:

  返回的每个对象的属性就是数组了,使用会不方便。

但是可以转变为对象,也就是动态构造对象。

  如:selectnew CclBdNetdata(q.id,q.code,q.name)

FROMCclBdNetdataASq  ORDER BY q.code asc

 同时要设计对应的构造函数

    publicCclMsgHttprequest(String id ,String msgres)

如果不转变为对象的方式如下

                    

    String hql="select stu.fname,sc.fid ,c.fname "

            +" fromStudentstu ,Studentcoursesc ,Coursec"

            +" where stu.fid=sc.student and sc.course=c.fid";

    List ls=stuDao.getQueryData(hql,null,0, 0);

     for(inti=0,j=ls.size();i<j;i++){

     

     Object[]ress=(Object[])ls.get(i);

     System.out.print(ress[0]);

     System.out.print(ress[1]);

     System.out.print(ress[2]);

     System.out.println("");

     }

 

 

 

 

l      内连接

 

交叉查询的方式

sql非常相识

String hql = " select d.name,q.name "

          +"FROM CclMsgHttprequest q,CclBdNetdata d   "

               +" where d.id=q.cclBdNetdata" ;

 

产生的sql:

select cclbdnetda1_.NAME as col_0_0_, cclmsghttp0_.NAME as col_1_0_ from CCL_MSG_HTTPREQUEST cclmsghttp0_, CCL_BD_NETDATA cclbdnetda1_ where cclbdnetda1_.ID=cclmsghttp0_.NETDATA

 

 

指定列的方式方式

会采用自动关联,这种关联会自动根据配置文件来

String hql =" select q.name ,q.cclBdNetdata.name"

                  +" FROM CclMsgHttprequest q   "

                  +" ";

 

产生的sql:跟上面一样

 

 select cclmsghttp0_.NAME as col_0_0_, cclbdnetda1_.NAME as col_1_0_

 from CCL_MSG_HTTPREQUEST cclmsghttp0_, CCL_BD_NETDATA cclbdnetda1_

 where cclmsghttp0_.NETDATA=cclbdnetda1_.ID

 

 

fetch的指定列的方式方式

hql:

FROM CclMsgHttprequest q inner joinfetchq.cclBdNetdata

 

产生的sql:

 

 select cclmsghttp0_.ID as ID3_0_,

cclbdnetda1_.ID as ID1_1_, cclmsghttp0_.NETDATA as NETDATA3_0_,

 cclmsghttp0_.PROTOCOLTYPE as PROTOCOL3_3_0_, cclmsghttp0_.CODE as CODE3_0_,

cclmsghttp0_.NAME as NAME3_0_, cclmsghttp0_.MSGVERSION as MSGVERSION3_0_,

 cclmsghttp0_.ISTEMP as ISTEMP3_0_, cclmsghttp0_.MSGTYPE as MSGTYPE3_0_,

cclmsghttp0_.MSGCOUNT as MSGCOUNT3_0_, cclmsghttp0_.METHOD as METHOD3_0_,

cclmsghttp0_.MSGCONTTYPE as MSGCONT11_3_0_, cclmsghttp0_.STATE as STATE3_0_,

cclmsghttp0_.MSGDESCRIPTION as MSGDESC13_3_0_, cclmsghttp0_.REQURL as REQURL3_0_,

cclmsghttp0_.COOKIE as COOKIE3_0_, cclmsghttp0_.MSGCONT as MSGCONT3_0_,

cclmsghttp0_.MSGRES as MSGRES3_0_, cclbdnetda1_.CODE as CODE1_1_, cclbdnetda1_.NAME as NAME1_1_,

cclbdnetda1_.DESCRIPTION as DESCRIPT4_1_1_

fromCCL_MSG_HTTPREQUEST cclmsghttp0_, CCL_BD_NETDATA cclbdnetda1_

wherecclmsghttp0_.NETDATA=cclbdnetda1_.ID

 


TAG: 性能 Hibernate hibernate

 

评分:0

我来说两句

xiaohanjiang

xiaohanjiang

River.liu又名小寒江。曾经从事多年JAVA软件开发工作,这几年一直从事软件测试工作。多年来,一直致力于软件工程、软件开发、软件测试方面的研究。不喜欢自称高手,不愿意自封资深;科学研究讲究的是务实、实践。真理、真知才是硬道理。茫茫海洋,我只希望我的每个理念能游弋于业界之间。我的思想能在你的脑海中徜徉。

日历

« 2024-04-19  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 39730
  • 日志数: 52
  • 建立时间: 2009-12-15
  • 更新时间: 2011-03-14

RSS订阅

Open Toolbar