標籤:
在我的上一篇部落格《【java】itoo項目實戰之hibernate懶載入最佳化效能》中,我曾提到過學生資料有2萬條,查詢資料十分的慢,這是讓人很受不了的事情,看著頁面進度條一直轉著圈圈,那種著急的感覺真的沒法形容。最開始考慮著使用lazy來最佳化,因為前台架構的原因,lazy 最佳化並沒有起到什麼左右,後來就想著有select new map最佳化。我先來畫畫關於查詢學生的級聯樹
這個樹的意思就是查詢學生的時候它的深度是4級。
在沒有最佳化之前,使用的是hibernate的hql語句:From Student where isDelete =?執行語句的時候,會發出467條語句列印到控制台上,打的滿屏都是,看控制台的時候,看著就感覺頭暈。
最佳化的時候,選擇用selectnew map進行最佳化,語句如下:
select newmap(S.id as id, S.name as name,S.comment as comment,S.remark asremark,S.accountAddress as accountAddress,S.code as code,S.email asemail,S.entranceDate as entranceDate,S.graduateSchool asgraduateSchool,S.identityCardID as identityCardID,S.classes.className asclassName,S.classes.institution.institutionName asinstitutionName,S.classes.institution.parentInstitution.institutionName asparentInstitution,S.classes.institution.schoolLevel.levelName aslevelName,S.classes.institution.id as institutionId,S.professional.professionalCodeas professionalCode) from Student S where S.isDelete =:isDelete
在列印語句的時候是1條。看控制台列印出來的結果還是挺舒服的。
但是他們的時間差如下:
從上表中可以看出,時間差得還是挺多的。在這裡我有些事想不明白:
1.使用new map查詢的時候,雖然只列印一條語句,它需要進行全表掃描,查詢的次數並不少,而hibernate的hql語句把每次查詢的語句都列印出來了。但是它的查詢時間相對new map來說,為什麼會變長呢?
2.hibernate的hql語句級聯查詢時間過長的原因會不會跟hibernate的緩衝有關係?每次查詢結果都需要放到1,2級緩衝中。
3.關於hibernate的查詢語句這樣設計的原因是什麼,當初hibernate的大牛們設計的時候,是處於什麼考慮的?
以上的三個問題我目前沒有找到相關的資料來解答,如果哪位看到了,可以相互討論一下.
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
【java】itoo項目實戰之大資料查詢之使用 new map 最佳化hibernate之級聯查詢