報表有 100 多萬條資料,展現太慢了怎麼辦?

xiaohuihui發表於2020-06-24

報表要展現 100 多萬資料得用分頁方式查詢了,如果是自己寫程式碼開發的報表就再實現一下分頁查詢就可以,不同的資料庫實現機制不一樣,具體網上資料很多。

如果是用報表工具開發的報表,要看工具本身是否支援非同步的分頁查詢,很多報表工具提供的還是常規分頁(假分頁),即一次性把資料載入到記憶體,然後前端再分頁展示。
好一點的方式是用資料庫分頁機制來做,利用行號來過濾,但這種方式也有很多弊端,比如你會發現翻到後面會越來越慢,還有這個裡面 提到的一些問題。

還有一種更好的方式,按照上面帖子裡給出的思路。把取數和呈現做現兩個非同步執行緒,取數執行緒發出 SQL 後就不斷取出資料後快取到本地儲存中,呈現執行緒根據頁數計算出行數到本地快取中去獲取資料顯示。這樣,只要已經取過的資料就能快速呈現,不會有等待感,還沒取到的資料需要等待一下也是正常可理解的;而取數執行緒只涉及一句 SQL,在資料庫中是同一個事務,也不會有不一致的問題。這樣,兩個問題都能得到解決。不過這需要設計一種可以按行號隨機訪問記錄的儲存格式,不然要靠遍歷把記錄數出來,那反應仍然會很遲鈍。

畫個圖感受感受:

imagepng
②和③分別是兩個執行緒

看起來有點複雜,還是拿個做好的工具直接用吧:
還能匯出 Excel,也能列印。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2700364/,如需轉載,請註明出處,否則將追究法律責任。

相關文章