【系統效能最佳化】Hibernate調優,hibernate調優

來源:互聯網
上載者:User

【系統效能最佳化】Hibernate調優,hibernate調優


基礎系統的學生資訊維護頁面,查詢顯示學生資訊,但每次查詢過程都很慢,所以對該部分進行最佳化.

 

Hibernate調優是使用SSH架構很常見的問題,一般可以從以下幾方面考慮:

一、資料庫設計調整

二、主配置參數(ID建置原則,二級緩衝,lazy載入)

三、一級緩衝管理

四、事務控制策略

五、HQL最佳化

 

我們這裡的最佳化,是對hql語句的最佳化,考慮使用select newmap代替hibernate的級聯查詢。

 

先說說實體關聯關係是怎麼樣的:

 

在學生實體Student中,classes是作為一個關聯實體而存在的.




在資料庫中表現為tb_student表中有一個classesId欄位.






在班級實體classes中,institution(專業)也是作為一個關聯實體而存在的.




在資料庫表中表現為tb_classes表中有一個institutionId欄位.





同樣地,institution實體中,nodeLevel(學校層次)也是作為一個關聯實體而存在的.




在資料庫表中表現為tb_institution表中有一個levelId欄位.




介紹完實體級聯關係和資料庫表結構,我們來看看真實資料.

 

學生表中有1.8萬條資料,如下所示.




我做的是分頁查詢,每頁10條學生資訊.

 

最佳化前:

查詢語句:

<span style="white-space:pre"></span>String hql ="From Student where isDelete =:isDelete ";


查詢過程:

發送150條select語句,用時28秒.

11:43:37,290 INFO  [stdout] (http-localhost/127.0.0.1:8080-1)28690毫秒



最佳化後:

查詢語句:

         String hql="select new map (S.id as id,"+ "S.name as name,"+ "S.comment as comment,"+ "S.remark as remark,"+ "S.accountAddress as accountAddress,"+ "S.code as code,"+ "S.email as email,"+ "S.identityCardID as identityCardID,"+ "S.classes.className as className,"+ "S.classes.institution.institutionName as institutionName,"+ "S.classes.institution.parentInstitution.institutionName as parentInstitution,"+ "S.classes.institution.schoolLevel.levelName as levelName,"+ "S.classes.institution.id as institutionId,"+ "P.professionalName as professionalName "+ ") from Student as S  left join S.professional as P "+" where S.isDelete=:isDelete ";



查詢過程:

共發送1條語句,用時38毫秒.


17:45:38,054 INFO  [stdout] (http-localhost/127.0.0.1:8080-6)Hibernate: select count(*) as col_0_0_ from TB_Student student0_ left outerjoin TB_Professional profession1_ on student0_.professionalId=profession1_.id wherestudent0_.isDelete=?

 

17:45:38,080 INFO  [stdout] (http-localhost/127.0.0.1:8080-6)Hibernate: select student0_.id as col_0_0_, student0_.name as col_1_0_,student0_.comment as col_2_0_, student0_.remark as col_3_0_,student0_.accountAddress as col_4_0_, student0_.code as col_5_0_,student0_.email as col_6_0_, student0_.entranceDate as col_7_0_,student0_.graduateSchool as col_8_0_, student0_.identityCardID as col_9_0_,classes2_.className as col_10_0_, institutio4_.InstitutionName as col_11_0_,institutio7_.InstitutionName as col_12_0_, schoolleve10_.levelName ascol_13_0_, classes2_.institutionId as col_14_0_, profession1_.professionalNameas col_15_0_ from TB_Student student0_ left outer join TB_Professionalprofession1_ on student0_.professionalId=profession1_.id, TB_Classes classes2_,TB_Institution institutio4_, TB_Institution institutio7_, TB_SchoolLevelschoolleve10_ where student0_.calssesId=classes2_.id andclasses2_.institutionId=institutio4_.id and institutio4_.pId=institutio7_.idand institutio4_.levelId=schoolleve10_.id and student0_.isDelete=? limit ?

 

17:45:38,091 INFO  [stdout] (http-localhost/127.0.0.1:8080-6)38毫秒




關於最佳化的分析請參考後續部落格.




著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.