今天就跟大家聊聊有關(guān)報(bào)表里有4個(gè)SQL數(shù)據(jù)集但報(bào)表查完很慢該怎么辦,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)公司是一家專注于做網(wǎng)站、網(wǎng)站制作與策劃設(shè)計(jì),淶水網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:淶水等地區(qū)。淶水做網(wǎng)站價(jià)格咨詢:028-86922220
你要確認(rèn)一下執(zhí)行完 SQL 結(jié)果是否都加載了,像 PL/SQL Developer 查完就只加載部分。
不過報(bào)表運(yùn)行時(shí)間肯定是要比數(shù)據(jù)庫(kù)查 SQL 慢的,如果慢很多可能是因?yàn)樵趫?bào)表里關(guān)聯(lián)多個(gè)數(shù)據(jù)集導(dǎo)致的。可以檢查一下在報(bào)表單元格里是否有類似:ds2.select(name,id==ds1.cusid) 這樣的表達(dá)式,表示數(shù)據(jù)集 2 和數(shù)據(jù)集 1 通過某個(gè)字段實(shí)現(xiàn)關(guān)聯(lián)。
幾乎所有報(bào)表工具在完成多數(shù)據(jù)集關(guān)聯(lián)時(shí)都采用順序遍歷的方式實(shí)現(xiàn),先拿一個(gè)數(shù)據(jù)集的第一條記錄去第二個(gè)數(shù)據(jù)集中遍歷查找符合條件的記錄,然后是第二條,第三條…,數(shù)據(jù)量大的時(shí)候性能就會(huì)很低。畫個(gè)圖看一下:
在報(bào)表里關(guān)聯(lián)這兩個(gè)數(shù)據(jù)集就要遍歷數(shù)據(jù)集 ds1 記錄數(shù)(100 萬(wàn))次數(shù)據(jù)集 ds2,總共比較 100 萬(wàn) *1000 次。。。速度當(dāng)然慢了。
要解決這個(gè)問題,得想辦法把關(guān)聯(lián)計(jì)算改到為報(bào)表準(zhǔn)備數(shù)據(jù)那個(gè)階段,方法有兩個(gè)。
一、用 SQL 完成原來(lái) 4 個(gè)數(shù)據(jù)集的關(guān)聯(lián)
寫個(gè)復(fù)雜 SQL,把原來(lái) 4 個(gè)數(shù)據(jù)集的 SQL 整合成一句,讓數(shù)據(jù)庫(kù)完成關(guān)聯(lián)計(jì)算(HASH JOIN),這樣會(huì)快很多。當(dāng)然這種做法有幾個(gè)限制:
1、 不能跨庫(kù)。如果原來(lái)的 4 個(gè)數(shù)據(jù)集來(lái)自不同數(shù)據(jù)庫(kù),就不能這么干了。異構(gòu)源當(dāng)然也不行;
2、 不能有存儲(chǔ)過程。改造存儲(chǔ)過程的成本太高,而且需要相應(yīng)數(shù)據(jù)庫(kù)權(quán)限;
3、 SQL 太復(fù)雜不好整合。有時(shí)報(bào)表的數(shù)據(jù)集 SQL 都很復(fù)雜,還帶有很多參數(shù)(報(bào)表傳過來(lái)的),很難整合到一起。其實(shí)這正是報(bào)表里要用多數(shù)據(jù)集的原因,報(bào)表工具支持多數(shù)據(jù)會(huì)帶來(lái)很多方便,但會(huì)影響性能。
二、直接用帶強(qiáng)計(jì)算能力的報(bào)表工具
有一些報(bào)表工具帶腳本計(jì)算能力,這樣就可以事先關(guān)聯(lián)完多個(gè)數(shù)據(jù)集。這樣就改變了原來(lái)要么在數(shù)據(jù)庫(kù)里關(guān)聯(lián)(很多情況沒法實(shí)現(xiàn)),要么在報(bào)表模板里關(guān)聯(lián)(性能太低)的狀況,性能往往能提升幾倍到幾十倍。
這個(gè)文章介紹了詳細(xì)的實(shí)施過程: 如何提高多源關(guān)聯(lián)報(bào)表性能 ,里面舉的三個(gè)例子性能分別提升了 5 倍、26 倍和 44 倍,效果比較明顯。
而且,這個(gè)工具有了腳本能力還支持跨庫(kù),文件、NOSQL 這些數(shù)據(jù)源,也能調(diào)用存儲(chǔ)過程,解決了數(shù)據(jù)庫(kù)面臨的那些問題。
看完上述內(nèi)容,你們對(duì)報(bào)表里有4個(gè)SQL數(shù)據(jù)集但報(bào)表查完很慢該怎么辦有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。