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

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

MySQL查詢使用Java的時(shí)間太長

MySQL查詢使用Java的時(shí)間太長

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

1 回答

?
楊魅力

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個贊

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

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

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

因此,我建議進(jìn)行以下改進(jìn):

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

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

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

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


查看完整回答
反對 回復(fù) 2021-04-21
  • 1 回答
  • 0 關(guān)注
  • 219 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號