1愚臀、前提
項(xiàng)目中脆荷,設(shè)備管理模塊查詢速度緩慢,以球閥為例懊悯。平均查詢時(shí)間約為一根煙左右。比較緩慢梦皮,難于接受炭分。
2、整理代碼思路
(1)定位速度變慢的原因
(2)根據(jù)原因分析相應(yīng)的處理方法
(3)實(shí)踐測(cè)試效果
代碼思路簡(jiǎn)介
1剑肯、查詢出主表數(shù)據(jù)捧毛,主表字段數(shù)據(jù)。(根據(jù)每頁(yè)展示數(shù)據(jù)不同而波動(dòng))
2让网、循環(huán)通過(guò)關(guān)系表查找對(duì)應(yīng)的字表字段和對(duì)應(yīng)的數(shù)據(jù)信息呀忧。
3、循環(huán)拼接成一條數(shù)據(jù)溃睹。
assetSpecList.size()>0&&dmClassspec.getAssetattrid().equals(assetSpecList.get(j).getAssetattrid())&&entity.getEventid().equals(assetSpecList.get(j).getAsseteventid())
4而账、返回,展示因篇。
簡(jiǎn)單測(cè)試后可以發(fā)現(xiàn)List<DmAssetspec> assetSpecList = this.dmAssetspecDao.getAssetAttrs(entity.getClassstructureid(), null, null,null);這一條查詢語(yǔ)句時(shí)間較長(zhǎng)泞辐,經(jīng)過(guò)讀代碼的分析,他的作用是查詢出所有滿足條件entity.getClassstructureid()的字表數(shù)據(jù)竞滓,然后根據(jù)所需要的50條數(shù)據(jù)的id篩選所需要的拼接數(shù)據(jù)咐吼。
注意!在沒有十分把握之前商佑,優(yōu)化的同時(shí)盡量減少對(duì)原有代碼邏輯破壞锯茄。
優(yōu)化思路
我們看這個(gè)條件,考慮從這個(gè)條件入手
assetSpecList.size()>0&&dmClassspec.getAssetattrid().equals(assetSpecList.get(j).getAssetattrid())&&entity.getEventid().equals(assetSpecList.get(j).getAsseteventid())
(1)將這個(gè)查詢所有的語(yǔ)句從循環(huán)體里茶没,拿到循環(huán)體外肌幽。避免重復(fù)多次的訪問(wèn)數(shù)據(jù)庫(kù)進(jìn)行查詢。
(2)避免查詢出所有的數(shù)據(jù)礁叔,嘗試只查詢出我們需要的50條數(shù)據(jù)相關(guān)數(shù)據(jù)再進(jìn)行業(yè)務(wù)拼接牍颈。
兩種優(yōu)化方案分別做了一套,都達(dá)到了優(yōu)化的效果但各有優(yōu)缺點(diǎn)琅关。
(1)針對(duì)第一種讥蔽,缺點(diǎn):所有數(shù)據(jù)依舊全部查詢,數(shù)據(jù)包會(huì)隨著數(shù)據(jù)的增加日益龐大画机,效率也會(huì)倍率下降冶伞。雖然避免了循環(huán)體內(nèi)的查詢數(shù)據(jù),在數(shù)據(jù)量小范圍內(nèi)尚可步氏,數(shù)據(jù)量變大响禽,問(wèn)題依然會(huì)暴露。
(2)針對(duì)第二種荚醒,缺點(diǎn):查詢?nèi)栽谘h(huán)體內(nèi)未提出芋类,單條查詢速度尚可,循環(huán)后不論數(shù)據(jù)量大小界阁,均會(huì)將效率延長(zhǎng)侯繁。
所以說(shuō)兩種代碼均有繼續(xù)優(yōu)化的空間,但可能就需要破壞代碼邏輯泡躯。需要進(jìn)一步解讀業(yè)務(wù)和具體的代碼邏輯贮竟,理清所有的功能思路和實(shí)現(xiàn)方式才能下手優(yōu)化。