第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL查詢使用Java的時間太長

MySQL查詢使用Java的時間太長

繁華開滿天機 2021-04-15 14:11:22
我有三個mysql表:顧客抱怨恢復問題陳述:我有5萬多個客戶,我想搜索有恢復請求的客戶。該問題已得到很好的解決,并且可以正常工作,但是問題是查詢最多需要30分鐘或更長的時間。請指導我如何減少查詢所花費的時間,或者如何加快搜索的速度?這是mysql表的快速幫助ERD:我再次明確指出,問題已解決且可以正常工作,但是由于數據庫中存在大量客戶和投訴,因此查詢最多需要30分鐘才能完成。有什么技術可以減少查詢時間或加快搜索速度?JAVA CODE 我有兩種方法:getMultiSelectionCustomersProfiles(....)searchRecoveryRequest(字符串customerRegistrationCode)注意:method2在method1中被調用
查看完整描述

1 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

如果沒有運行的測試系統(tǒng),就很難找到合適的解決方案。

我發(fā)現可疑的是,您的第一個查詢的每個結果行都會調用您的2nd方法,并且它似乎每次都打開和關閉數據庫連接。(您ConnectionHandler可能實現了正確的連接池,但是我無法在不知道代碼的情況下進行判斷。如果每次都真正打開和關閉連接,那么這是迄今為止代碼中最昂貴的事情)。

但是,即使有適當的連接池,您的第二個方法也會為每個調用創(chuàng)建并執(zhí)行新的SQL語句。這稱為N + 1選擇查詢問題。

因此,我建議進行以下改進:

  1. 嘗試將兩個SQL語句合并為一個(可能使用嵌套的SELECT等)。這樣就不能執(zhí)行1 + N查詢,這將大大減少執(zhí)行時間。

  2. 如果那不可能,請PreparedStatement對第二種方法至少使用a 。確保在進入循環(huán)之前創(chuàng)建一次準備好的語句。因此,您必須使用第一種方法創(chuàng)建和準備它。因此,您需要第二個數據庫連接。也分別在循環(huán)之后之前打開和關閉它。

  3. 另一策略:運行第一個查詢,迭代結果集,然后將所有結果放入regCodes列表中。關閉查詢后,請使用批處理via處理PreparedStatement所有regCodes。另一個優(yōu)點:因此,僅需要一個數據庫連接。

順便說一句:成熟的對象關系映射框架(例如Hibernate)已經提供了開箱即用的這些策略,以避免或至少減輕了1 + N選擇問題。


查看完整回答
反對 回復 2021-04-21
  • 1 回答
  • 0 關注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號