溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

報表里有4個SQL數(shù)據(jù)集但報表查完很慢該怎么辦

發(fā)布時間:2021-12-02 10:23:06 來源:億速云 閱讀:123 作者:柒染 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)報表里有4個SQL數(shù)據(jù)集但報表查完很慢該怎么辦,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

你要確認(rèn)一下執(zhí)行完 SQL 結(jié)果是否都加載了,像 PL/SQL Developer 查完就只加載部分。

不過報表運(yùn)行時間肯定是要比數(shù)據(jù)庫查 SQL 慢的,如果慢很多可能是因為在報表里關(guān)聯(lián)多個數(shù)據(jù)集導(dǎo)致的??梢詸z查一下在報表單元格里是否有類似:ds2.select(name,id==ds1.cusid) 這樣的表達(dá)式,表示數(shù)據(jù)集 2 和數(shù)據(jù)集 1 通過某個字段實現(xiàn)關(guān)聯(lián)。

幾乎所有報表工具在完成多數(shù)據(jù)集關(guān)聯(lián)時都采用順序遍歷的方式實現(xiàn),先拿一個數(shù)據(jù)集的第一條記錄去第二個數(shù)據(jù)集中遍歷查找符合條件的記錄,然后是第二條,第三條…,數(shù)據(jù)量大的時候性能就會很低。畫個圖看一下:

報表里有4個SQL數(shù)據(jù)集但報表查完很慢該怎么辦

在報表里關(guān)聯(lián)這兩個數(shù)據(jù)集就要遍歷數(shù)據(jù)集 ds1 記錄數(shù)(100 萬)次數(shù)據(jù)集 ds2,總共比較 100 萬 *1000 次。。。速度當(dāng)然慢了。

要解決這個問題,得想辦法把關(guān)聯(lián)計算改到為報表準(zhǔn)備數(shù)據(jù)那個階段,方法有兩個。

一、用 SQL 完成原來 4 個數(shù)據(jù)集的關(guān)聯(lián)

寫個復(fù)雜 SQL,把原來 4 個數(shù)據(jù)集的 SQL 整合成一句,讓數(shù)據(jù)庫完成關(guān)聯(lián)計算(HASH JOIN),這樣會快很多。當(dāng)然這種做法有幾個限制:

1、 不能跨庫。如果原來的 4 個數(shù)據(jù)集來自不同數(shù)據(jù)庫,就不能這么干了。異構(gòu)源當(dāng)然也不行;

2、 不能有存儲過程。改造存儲過程的成本太高,而且需要相應(yīng)數(shù)據(jù)庫權(quán)限;

3、 SQL 太復(fù)雜不好整合。有時報表的數(shù)據(jù)集 SQL 都很復(fù)雜,還帶有很多參數(shù)(報表傳過來的),很難整合到一起。其實這正是報表里要用多數(shù)據(jù)集的原因,報表工具支持多數(shù)據(jù)會帶來很多方便,但會影響性能。

二、直接用帶強(qiáng)計算能力的報表工具

有一些報表工具帶腳本計算能力,這樣就可以事先關(guān)聯(lián)完多個數(shù)據(jù)集。這樣就改變了原來要么在數(shù)據(jù)庫里關(guān)聯(lián)(很多情況沒法實現(xiàn)),要么在報表模板里關(guān)聯(lián)(性能太低)的狀況,性能往往能提升幾倍到幾十倍。

這個文章介紹了詳細(xì)的實施過程: 如何提高多源關(guān)聯(lián)報表性能 ,里面舉的三個例子性能分別提升了 5 倍、26 倍和 44 倍,效果比較明顯。

而且,這個工具有了腳本能力還支持跨庫,文件、NoSQL 這些數(shù)據(jù)源,也能調(diào)用存儲過程,解決了數(shù)據(jù)庫面臨的那些問題。

看完上述內(nèi)容,你們對報表里有4個SQL數(shù)據(jù)集但報表查完很慢該怎么辦有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

sql
AI