<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java軟件報(bào)表軟件技術(shù)博客

    java報(bào)表軟件技術(shù)匯總 java報(bào)表軟件制作 報(bào)表軟件新聞
    posts - 355, comments - 100, trackbacks - 0, articles - 3
       :: 首頁(yè) :: 新隨筆 ::  :: 聚合  :: 管理
    第一節(jié)、      從細(xì)節(jié)入手
     
    盡量不用select * from
    FineReport報(bào)表的數(shù)據(jù)集采用的是表模型,也就是說(shuō)通過(guò)SQL這種DSL語(yǔ)言,從數(shù)據(jù)庫(kù)通過(guò)簡(jiǎn)單查詢(xún)或各種組合關(guān)聯(lián)查詢(xún)得到一個(gè)關(guān)系表,而這部分SQL查詢(xún)根據(jù)各種數(shù)據(jù)庫(kù)產(chǎn)商長(zhǎng)時(shí)間的優(yōu)化(比如建立索引),已經(jīng)非常成熟。而這些表結(jié)構(gòu)數(shù)據(jù)集一般要通過(guò)FineReport報(bào)表模型的復(fù)雜處理才能生成最終的表樣。因此,從數(shù)據(jù)庫(kù)sql查詢(xún)?nèi)〕鰯?shù)據(jù)量越少,FineReport報(bào)表模型需要做的復(fù)雜處理和計(jì)算就越少,所化的時(shí)間和內(nèi)存就少了,從而可以提高性能表現(xiàn)。
    sql初學(xué)者剛開(kāi)始時(shí)往往會(huì)忽略sql的寫(xiě)法細(xì)節(jié)。然而sql優(yōu)化卻是性能優(yōu)化中十分關(guān)鍵的一點(diǎn),有時(shí)候sql優(yōu)化的好的話(huà),可以大大提高性能。比如slect * from table1這種寫(xiě)法,就比較粗糙,沒(méi)有經(jīng)過(guò)優(yōu)化,在數(shù)量不是很大時(shí)或許沒(méi)問(wèn)題,但是如果數(shù)據(jù)量很大的話(huà),此處就是一個(gè)很好的優(yōu)化點(diǎn)。
    如上圖所示,初級(jí)用戶(hù)經(jīng)常直接拖拽表名,點(diǎn)菜單后就沒(méi)有再做處理,這在某些性能敏感的報(bào)表中是個(gè)不好的習(xí)慣。例如報(bào)表中只需要用到三個(gè)字段,但是數(shù)據(jù)庫(kù)中實(shí)際的表有十個(gè)字段,一些初學(xué)者習(xí)慣性的用select * from table1,這樣相當(dāng)于把十個(gè)字段的數(shù)據(jù)都取到報(bào)表服務(wù)器端,增加了報(bào)表服務(wù)器端的內(nèi)存占用以及減慢了運(yùn)算速度
    正確的寫(xiě)法是:select col1,col2,col3 from table1,即用到哪幾個(gè)字段就取哪幾個(gè),用不著的不要取。從重要的細(xì)節(jié)入手,有時(shí)候會(huì)帶來(lái)很好效果。
     
     
    第二節(jié)、盡量在sql里分組
    對(duì)于匯總類(lèi)型的報(bào)表,往往需要進(jìn)行分組聚集運(yùn)算,如果在數(shù)據(jù)庫(kù)中先進(jìn)行一次分組聚集,能夠大大減少取到報(bào)表服務(wù)器的記錄數(shù),加快取數(shù)和報(bào)表運(yùn)算的速度。
    看如下報(bào)表:
     
    這是一個(gè)典型的交叉分組報(bào)表,其sql有兩種寫(xiě)法:
    第一種:SELECT Region, Product, Amount FROM sale
     
     
    第二種:SELECT Region, Product, sum(Amount) FROM sale group by Region, Product
     
     
    而報(bào)表的做法都一樣,如下圖所示:
     
     
    優(yōu)化分析:
    第一種做法,不僅僅取到報(bào)表服務(wù)器上記錄數(shù)多了,取數(shù)速度慢,而且報(bào)表模型需要對(duì)表數(shù)據(jù)列進(jìn)行分組運(yùn)算,增加了報(bào)表運(yùn)行時(shí)間;
    第二種做法,數(shù)據(jù)庫(kù)雖然要進(jìn)行分組運(yùn)算,但是數(shù)據(jù)庫(kù)中有索引,運(yùn)算速度快,且取到報(bào)表服務(wù)器端的記錄數(shù)大大減少,取數(shù)速度大大加快,因此在報(bào)表模型進(jìn)行分組運(yùn)算的時(shí)候只要對(duì)很少的記錄數(shù)進(jìn)行,報(bào)表的運(yùn)算速度大大加快了。
    實(shí)驗(yàn)結(jié)果以及分析表明,第二種做法的性能遠(yuǎn)優(yōu)于第一種。所以,分組應(yīng)該盡量在sql里進(jìn)行。
     
    第三節(jié)、盡量在sql里排序
    跟分組同樣的道理,報(bào)表中往往需要對(duì)數(shù)據(jù)進(jìn)行排序,排序運(yùn)算可以在數(shù)據(jù)庫(kù)中進(jìn)行,也可以在報(bào)表端進(jìn)行,如果報(bào)表中的排序規(guī)則是確定的,那么建議排序操作選擇在數(shù)據(jù)庫(kù)端進(jìn)行,因?yàn)閿?shù)據(jù)庫(kù)中有索引,通常是C/C++語(yǔ)言(往往在效率上比Java)寫(xiě)的,數(shù)據(jù)運(yùn)算速度快。下面以一個(gè)簡(jiǎn)單的分組報(bào)表為例:
    如果排序是在sql里面進(jìn)行,則sql里面寫(xiě)SELECT Manager, Product, Amount FROM sale order by Manager,如下:
     
     
    報(bào)表的做法,也很簡(jiǎn)單,直接拖拽數(shù)據(jù)列,設(shè)置格式,如下:
     
     
    這樣做時(shí),數(shù)據(jù)集ds1中對(duì)Manager數(shù)據(jù)列已經(jīng)排好了序,所以報(bào)表模型不需要對(duì)數(shù)據(jù)列做任何處理,并且取數(shù)時(shí)是順序的從數(shù)據(jù)集中依次從上倒下取數(shù),只需遍歷一遍,從而節(jié)省了時(shí)間,優(yōu)化了性能。
    如果排序不在sql中進(jìn)行
    則需要在數(shù)據(jù)列Manager的高級(jí)面板中對(duì)排序進(jìn)行設(shè)定,設(shè)為升序
     
     
     
    所以,從實(shí)驗(yàn)結(jié)果可以看出,排序在sql里進(jìn)行是個(gè)優(yōu)化性能的好辦法。
     
    第四節(jié)、盡量在sql里過(guò)濾
    這個(gè)問(wèn)題和分組及排序是類(lèi)似的,報(bào)表很多時(shí)候并不需要對(duì)表中的所有記錄進(jìn)行操作,而是對(duì)部分滿(mǎn)足條件的記錄進(jìn)行操作,因此建議過(guò)濾操作在數(shù)據(jù)庫(kù)中進(jìn)行,這樣取到報(bào)表服務(wù)器端的記錄數(shù)大大減少,既加快了取數(shù)的速度,也加快了報(bào)表的運(yùn)算速度,因?yàn)閳?bào)表需要處理的數(shù)據(jù)少了。
    依然那銷(xiāo)售記錄表舉例:
    如果我們要取Amount超過(guò)300的記錄,在sql中寫(xiě)SELECT Manager, Product, Amount FROM sale where Amount > 300
    如下圖:
     
     
    如果不在sql里面進(jìn)行過(guò)濾,則需要在數(shù)據(jù)列的過(guò)濾面板中進(jìn)行設(shè)置,如下
     
     
    直接在sql中過(guò)濾,要比在數(shù)據(jù)列過(guò)濾面板中設(shè)置過(guò)濾,效率高很多。所以,考慮到性能,盡量在sql中進(jìn)行過(guò)濾。
     



    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产成人精品激情| 男女交性无遮挡免费视频| 妞干网在线免费视频| 亚洲欧美日韩自偷自拍| 国产午夜鲁丝片AV无码免费| 久久久久久噜噜精品免费直播| 亚洲成综合人影院在院播放| 在线观看亚洲免费| 久久精品国产影库免费看| 亚洲精品伊人久久久久| 亚洲欧洲久久久精品| 亚欧免费视频一区二区三区| 美女视频黄频a免费观看| 亚洲AV成人精品网站在线播放| 99久久综合国产精品免费| www永久免费视频| 亚洲人6666成人观看| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 久久久久久av无码免费看大片| 亚洲欧洲日本国产| 亚洲精品乱码久久久久久不卡 | 成人免费视频一区二区三区| 一本到卡二卡三卡免费高| 亚洲女人初试黑人巨高清| 亚洲?V无码乱码国产精品| 亚洲免费观看在线视频| 午夜免费国产体验区免费的| 亚洲另类图片另类电影| 中文字幕亚洲不卡在线亚瑟| 成年女人免费视频播放体验区| 国产一级高青免费| 久久精品国产亚洲AV天海翼| 亚洲视频免费在线播放| 国产亚洲欧洲Aⅴ综合一区| 最近中文字幕无吗免费高清| 国产精品免费无遮挡无码永久视频| 婷婷亚洲综合一区二区| 激情五月亚洲色图| 婷婷亚洲久悠悠色悠在线播放| 五月婷婷亚洲综合| 女人让男人免费桶爽30分钟|