• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見(jiàn)諒!~
            隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            數(shù)據(jù)庫(kù)優(yōu)化——空間換時(shí)間優(yōu)化

              1 增加冗余表,目的:減少查詢數(shù)據(jù)量(匯總字段和表);2,增加冗余字段(包括計(jì)算字段) ,目的:減少業(yè)務(wù)邏輯計(jì)算和匯總時(shí)間;3, 增加索引(包括計(jì)算索引),目的:查詢索引,而不掃描表(盡管掃描表有時(shí)是最優(yōu)的)……

            在查詢優(yōu)化中,有一個(gè)重要的概念:空間換取查詢時(shí)間

            這一理論最好的應(yīng)用就是:數(shù)據(jù)倉(cāng)庫(kù)(OLAP):在海量數(shù)據(jù)庫(kù)里(一般是TB級(jí))分析數(shù)據(jù),通過(guò)對(duì)數(shù)據(jù)的ETL和計(jì)算匯總,得到有用的數(shù)據(jù),并通過(guò)不同維度查看統(tǒng)計(jì)數(shù)據(jù)(一般比較少),實(shí)現(xiàn)上鉆和下鉆分析數(shù)據(jù)。

            現(xiàn)在討論一下在OLTP系統(tǒng)中空間換取查詢時(shí)間常用的幾個(gè)方法:

            1,增加冗余表(計(jì)算匯總表)

            2,增加冗余字段(包括計(jì)算字段)

            3, 增加索引(包括計(jì)算索引)

            4,增加索引視圖(物化視圖)

            5,數(shù)據(jù)緩存

            5.1,數(shù)據(jù)庫(kù)緩存(如換成64位的系統(tǒng)和數(shù)據(jù)庫(kù)):

            5.2,程序緩存(如:hibernate中的緩存)

            我們?cè)陂_(kāi)發(fā)系統(tǒng)中或多或少的使用了以上的方法,這次結(jié)合實(shí)際,討論一下這些方法的具體使用和目的:

            1 增加冗余表

            案例一:

            我們優(yōu)化一個(gè)系統(tǒng),原來(lái)的開(kāi)發(fā)人員,由于數(shù)據(jù)量比較大,為保證查詢性能,對(duì)于辦事處和分公司是實(shí)時(shí)計(jì)算,片區(qū)和總公司是非實(shí)時(shí)統(tǒng)計(jì),開(kāi)發(fā)人員就使用統(tǒng)計(jì)片區(qū)和總公司統(tǒng)計(jì)匯總靜態(tài)表,每天晚上凌晨1點(diǎn)計(jì)算上一天的的匯總數(shù)據(jù)。并存放到了靜態(tài)表。統(tǒng)計(jì)時(shí),片區(qū)和總公司是統(tǒng)計(jì)靜態(tài)表數(shù)據(jù),統(tǒng)計(jì)速度很快。

            但后來(lái)發(fā)現(xiàn)總公司匯總數(shù)據(jù)和分公司匯總數(shù)據(jù)不對(duì)。原來(lái)這個(gè)系統(tǒng)的網(wǎng)絡(luò)管理員可以在系統(tǒng)里直接去改數(shù)據(jù)。這樣我們的統(tǒng)計(jì)靜態(tài)數(shù)據(jù)就不對(duì)。為何要改這個(gè)數(shù)據(jù),因?yàn)橄到y(tǒng)bug和下面業(yè)務(wù)人員的操作不對(duì),就直接修改數(shù)據(jù)庫(kù)數(shù)據(jù)。

            為了保證總公司數(shù)據(jù)和分公司匯總數(shù)據(jù)一致,后來(lái)取消了這個(gè)計(jì)算冗余表,直接實(shí)時(shí)統(tǒng)計(jì)。

            總結(jié):這個(gè)例子說(shuō)明冗余表的利和弊,假如我們的系統(tǒng)數(shù)據(jù)可能更改,這時(shí)冗余表的數(shù)據(jù)就不準(zhǔn)確了,這點(diǎn)要注意的。這

            也是計(jì)算冗余表的一個(gè)主要問(wèn)題:數(shù)據(jù)的更改,統(tǒng)計(jì)數(shù)據(jù)不準(zhǔn)。

            目的:減少查詢數(shù)據(jù)量(匯總字段和表)

            2,增加冗余字段(包括計(jì)算字段)

            案例一:

            系統(tǒng)的一個(gè)模塊,業(yè)務(wù)要求是用戶輸入一段日期(時(shí)間段)的投入總金額,由于業(yè)務(wù)要求計(jì)算每天的金額,這時(shí)如果沒(méi)有每天的數(shù)據(jù),則只有去查詢出總數(shù),在通過(guò)時(shí)間相減得到總天數(shù),在計(jì)算出每天的金額。

            如果數(shù)據(jù)量比較大,計(jì)算時(shí)間比較長(zhǎng),這時(shí)我們就在程序里做一個(gè)計(jì)算功能,把這個(gè)數(shù)據(jù)算好自己放到表里,這時(shí)就不需要統(tǒng)計(jì)時(shí)計(jì)算了。

            總結(jié):我們?cè)黾尤哂嘧侄危康木褪菫榱藢⒑笃谕ㄟ^(guò)數(shù)據(jù)庫(kù)計(jì)算的時(shí)間細(xì)化,分散到每次插入數(shù)據(jù)時(shí)的時(shí)間,這點(diǎn)時(shí)間是很少的。但積累起來(lái)卻是很多,特別是在后面統(tǒng)計(jì)和分析時(shí)就很明顯。當(dāng)然,我們可以細(xì)化時(shí)間和先期匯總數(shù)據(jù),如總數(shù)。可以插入數(shù)據(jù)時(shí),把總數(shù)計(jì)算出來(lái),有利于減少匯總數(shù)據(jù)量。

            目的:減少業(yè)務(wù)邏輯計(jì)算和匯總時(shí)間

            3, 增加索引(包括計(jì)算索引)

            索引是數(shù)據(jù)冗余的一種,也是將表中列的數(shù)據(jù)冗余出來(lái),這樣查詢時(shí)就可以不用去查詢表,同時(shí)可以使用索引數(shù)據(jù)結(jié)構(gòu)快速搜索seek。

            我們說(shuō)的索引覆蓋,就是查詢中將需要的列全部冗余,通過(guò)索引來(lái)查詢,而不需要去表中查詢數(shù)據(jù)。

            目的:查詢索引,而不掃描表(盡管掃描表有時(shí)是最優(yōu)的)

            4,增加索引視圖(物化視圖)

            我們說(shuō)的索引視圖(物化視圖),就是對(duì)需要查詢關(guān)聯(lián)的數(shù)據(jù)或匯總數(shù)據(jù),預(yù)先通過(guò)實(shí)體表存放起來(lái)。這樣查詢時(shí)可以不去關(guān)聯(lián)的表(表有時(shí)可能很多,數(shù)據(jù)量比較大),去直接去查詢索引視圖(物化視圖)。

            這里,如上面“增加冗余表”,提到數(shù)據(jù)可能更改的問(wèn)題,就可以用索引視圖(物化視圖)來(lái)實(shí)現(xiàn)。

            當(dāng)然索引視圖(物化視圖)有條件限制,不是所有查詢都可以使用的。如sql server索引視圖就只能用inner join關(guān)聯(lián),同時(shí)要有唯一的聚集索引。由于索引視圖(物化視圖)成本較高,一般在OLTP系統(tǒng)中使用較少(以大量犧牲DML時(shí)間為代價(jià)),在OLAP中使用較多。

            目的:減少查詢數(shù)據(jù)量

            5,數(shù)據(jù)緩存

            一,數(shù)據(jù)庫(kù)緩存,也是一種優(yōu)化方式,如將經(jīng)常訪問(wèn)的表放到內(nèi)存里,這樣在內(nèi)存中查詢速度要比在硬盤速度快很多。一般的方法如下:

            1,將32位操作系統(tǒng)和數(shù)據(jù)庫(kù)改成64位的,提高內(nèi)存使用和cpu尋址能力

            2,在Oracle里可以把使用頻繁但數(shù)據(jù)量比較少的表(keep cache)起來(lái),啟動(dòng)時(shí)就一直放到內(nèi)存中。

            二,程序緩存

            目前有一些緩存框架,如JBOSS Cache,hibernate緩存,Ehcache等緩存框架,可以減少查詢數(shù)據(jù)庫(kù),提高速度。

            三,靜態(tài)變量

            案例一:

            我們以前做一個(gè)系統(tǒng),由于沒(méi)有用緩存框架,一般使用的靜態(tài)基本的數(shù)據(jù)(如查詢機(jī)構(gòu),車輛,人員等),啟動(dòng)程序時(shí),去數(shù)據(jù)庫(kù)去查詢數(shù)據(jù),放到一個(gè)List里面,然后封裝了一些靜態(tài)方法,這些基本信息就放到靜態(tài)list里。這時(shí)可以做一些的查詢,如取一些數(shù)據(jù),不用去查詢數(shù)據(jù)庫(kù)了,直接調(diào)用靜態(tài)方法,減少和數(shù)據(jù)庫(kù)交互次數(shù)。

            數(shù)據(jù)緩存目的:1,減少和數(shù)據(jù)庫(kù)的交互次數(shù)

            2,盡可能使用內(nèi)存(數(shù)據(jù)庫(kù)服務(wù)器和應(yīng)用服務(wù)器)

            posted on 2009-06-18 14:12 肥仔 閱讀(225) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)庫(kù)

            亚洲国产欧美国产综合久久 | 久久国产香蕉视频| 成人久久综合网| 亚洲欧美精品伊人久久| 久久精品国产精品亚洲下载| 一级女性全黄久久生活片免费 | 亚洲精品无码久久不卡| 精品国产99久久久久久麻豆 | 久久国产精品久久国产精品| 99久久伊人精品综合观看| 综合久久一区二区三区 | 国产精品嫩草影院久久| 久久久久亚洲精品日久生情| 久久99国产精品久久99| 久久午夜免费视频| 99久久99久久精品国产| av色综合久久天堂av色综合在| 丰满少妇人妻久久久久久| 欧美日韩成人精品久久久免费看| 亚洲αv久久久噜噜噜噜噜| 久久这里有精品视频| 久久国产精品久久| 久久久国产精品亚洲一区| 伊色综合久久之综合久久| 久久99国产精品久久| 亚洲AV无码久久精品狠狠爱浪潮| 精品久久久久久久久久久久久久久| 一本一本久久aa综合精品| 伊人久久大香线蕉综合热线| 91性高湖久久久久| 99精品久久久久久久婷婷| 91精品国产综合久久婷婷| 亚洲午夜久久久影院伊人| 国产69精品久久久久APP下载| 狠狠人妻久久久久久综合| 国产精品热久久毛片| 久久综合九色综合久99 | 伊人久久综合热线大杳蕉下载| 久久精品国产亚洲av麻豆小说| 亚洲AV无码久久| 精品久久久久久亚洲精品|