當前位置:首頁 » 編程語言 » sql如何不懶載入
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql如何不懶載入

發布時間: 2022-06-07 17:50:46

A. 復雜慢sql語句如何優化

很簡單啊,優先索引,第二結構,第三演算法。
索引最簡單,如果是SQL server客戶端或者toad可以提示有哪些需要進行優化的地方。
結構就是針對要查詢的值,盡量集中到一個表,減少串表,函數查詢,左鏈的表欄位查詢。
演算法就是OR還是IN?串表時IN還是EXISTS ?oracle in 的限制。條件執行順序等。
然後還有其他注意的,例如只查固定欄位就不要 select * 只要注意以上步驟,千萬級數據串10個秒也能1秒內顯示出來。
有條件的話,當然是用歸檔數據進行查詢,這樣就不會佔用業務數據IO了,最後一步就是「雲計算」(解析有一百種,沒有統一概念,我的意識其實就是歸檔過程中根據分組維度計算好,並根據日期放進相關的表,減少表粒度,只進行簡單的select查詢)

B. 什麼是hibernate懶載入什麼時候用懶載入為什麼要用懶載入

所謂懶載入(lazy)就是延時載入,延遲載入。
什麼時候用懶載入呢,我只能回答要用懶載入的時候就用懶載入。
至於為什麼要用懶載入呢,就是當我們要訪問的數據量過大時,明顯用緩存不太合適,
因為內存容量有限 ,為了減少並發量,減少系統資源的消耗,
我們讓數據在需要的時候才進行載入,這時我們就用到了懶載入。
比如部門ENTITY和員工ENTITY,部門與員工1對多,如果lazy設置為false,那麼只要載入了一個部門的po,就會根據一對多配置的關系把所有員工的po也載入出來。但是實際上有時候只是需要用到部門的信息,不需要用到 員工的信息,這時員工po的載入就等於浪費資源。如果lazy設置為true,那麼只有當你訪問部門po的員工信息時候才回去載入員工的po的信息。

hibernate3.0中lazy有三個值,true,false,proxy,默認的是lazy="proxy".
具體設置成什麼要看你的需求,並不是說哪個設置就是最好的。
假如在student對象中包含一個head對象
如果你確定在用student對象的時候就要用到head對象里的屬性,那你就設置立即載入,因為設置立即載入那麼在查詢student的同時就會查詢student的head,hibernate就會在查詢的時候關聯兩張表從而生成的sql就可能只有一條。而如果你設置的是延遲載入,那麼肯定會要生成1+N條sql語句:其中「1」是查詢student的語句,「N」是根據N個student的id去查詢head的N條語句。而且,延遲載入是要用到的 時候才去執行查詢,這樣系統判斷那裡需要載入,那裡不需要載入也需要時間,性能上肯定就不如立即載入了!
如果,你是有的地方需要用到student的時候才用到head屬性,那麼你就設置成延遲載入,因為查詢2張表的數據肯定要比查詢1張表的數據消耗大。
到低要怎樣設置就要看你的實際需求了
延遲載入機制是為了避免一些無謂的性能開銷而提出來的,所謂延遲載入就是當在真正需要數據的時候,才真正執行數據載入操作。在Hibernate中提供了對實體對象的延遲載入以及對集合的延遲載入,另外在Hibernate3中還提供了對屬性的延遲載入。

C. hibernate屬性懶載入怎麼設置

這個好像做不到

懶載入目的是提高效率

載入UserRole的一個屬性和UserRole的所有屬性,這樣的效率差距非常小
(如果UserRole有Set等關聯的,肯定已經採用了懶載入)

如果你的UserRole只有一個屬性經常變動,而其它的不懂的話
建議給不經常變動的屬性加入
dynamic-insert="true" dynamic-update="true"

意思就是動態插入更新
這樣,當你把UserRole載入上來後(全部屬性),你更新了一個屬性(沒有動態插入更新的)
那麼你update之後
hibernate發出的sql語句,只有一個屬性被賦值,而其它的(dynamic屬性)是不會發出更新語句的

D. 怎樣讓SQL開機不自動啟動

1、點擊桌面左下角開始菜單,然後在搜索框內輸入msconfig,按enter進入;
2、在彈出來的系統配置窗口中,切換到「啟動」選項卡;
3、然後將帶有sql server字樣前的小勾去掉,,並點擊確定就可以取消sql的開機自啟動了。

E. 員工和部門兩張表,是一對多的關系,並且是懶載入,如何通過員工查出部門信息,請高手指教!寫一條sql。

select 部門信息 from 部門表 where 部門id = (select 部門id from 員工表 where 員工id = 員工id)

F. 如何設置sql 2000開機時不自動啟動

開始——控制面板——管理工具——服務——按M找到MSSQLSERVER——右鍵屬性——啟動類型改為禁用

G. hibernate如何關閉懶載入

把這個對象對應的hbm.xml的中的相應屬性設置成lazy="true" true是默認設置。

H. hibernate annotation懶載入怎麼寫

對應的屬性寫lazy="false";用load方法去獲取對象,然後會只查詢主表,當你用主表對象去獲取從表對象時,會先從session裡面去找從表對象,如果這個時候session關了,就會拋出sessionclosedexception,如果從session裡面找到了,就不會執行sql了,如果session里沒找到,會執行sql去查詢資料庫

I. sql語句問題,請問如何提高運行效率和速度

其實你的效率低的原因不是用SQL語句還是存儲過程的問題。看你的描述以及代碼,如果是多次循環上述代碼的話,確實效率會比較低,原因是有一次循環就會和資料庫產生一次查詢和更新通訊,希望增加效率應該從盡量減少和資料庫通訊方面來考慮解決,因為是這里出現了效率瓶頸。

下面是具體的代碼分析:
首先更新和插入操作是無法減少的,必須一條紀錄一條紀錄更新,一條紀錄一條紀錄的插入,但是查詢完全可減低為一次查詢。
下面是偽代碼:
strsql="select * from "&tabl&" where id+idd in ('所有要循環的id+idd,他們之間用逗號分開')"
rs.open strsql,conn,3,3
do while not rs.eof
rs("degree")=rs("degree")+1
tempstr=tempstr&id&idd&"|" '這里是將資料庫中存在的id,idd記錄保存下來,存入一個臨時變數中,用|符號分割開。
rs.update
rs.movenext
loop
'上面的代碼是更新了資料庫中存在的紀錄,並記錄下了存在的記錄ID+IDD
下面將所有存在的已update的id+idd的值從所有的id+idd的值中剔除掉,取到所有需要insert的id+idd紀錄,然後一起insert進資料庫即可。代碼我不再寫了,這樣的字元串對比操作並不難,因為這樣都是內存操作,速度會很快。僅提供一個思路。希望對你有用。

J. 怎麼讓系統啟動時SQL不自動啟動運行。

右鍵點擊「我的電腦」打開屬性「管理」在彈出的窗體里打開「服務和應用程序」——「服務」
在到右邊找到「SQL
Server
(MSSQLSERVER)」
雙擊,在常規里有個「啟動類型」把他改為手動
在把他的「服務狀態」改為停止,就OK了