• <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>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            分布式 DBA: 創(chuàng)建和使用分區(qū)表

            Posted on 2012-03-05 23:47 Prayer 閱讀(774) 評(píng)論(0)  編輯 收藏 引用 所屬分類: DB2
            http://doc.chinaunix.net/db2/201009/893927.shtml

            表分區(qū)是一種數(shù)據(jù)組織方案,它根據(jù)一列或多列中的值把表數(shù)據(jù)劃分為多個(gè)稱為數(shù)據(jù)分區(qū) 的存儲(chǔ)對(duì)象。分區(qū)的表能夠包含的數(shù)據(jù)比普通的表多得多;另外,通過利用稱為分區(qū)消除 的過程,針對(duì)分區(qū)表運(yùn)行的查詢通常比針對(duì)非分區(qū)表運(yùn)行時(shí)執(zhí)行速度更快,需要的磁盤 I/O 更少。(DB2 優(yōu)化器能夠感知分區(qū),在執(zhí)行查詢時(shí)只掃描相關(guān)的數(shù)據(jù)分區(qū)。)

              在這篇專欄文章中,我將討論如何創(chuàng)建分區(qū)表,解釋分區(qū)表的定義如何決定各個(gè)記錄的存儲(chǔ)位置。

              范圍分區(qū)表

              數(shù)據(jù)分區(qū)也稱為范圍(當(dāng)前 DB2 只支持范圍分區(qū)方案),一個(gè)數(shù)據(jù)分區(qū)包含一個(gè)行子集,這些行存儲(chǔ)在與表中其他行集不同的地方。不同的數(shù)據(jù)分區(qū)可以駐留在不同的表空間中,也可以駐留在相同的表空間中。CREATE TABLE 語(yǔ)句的 PARTITION BY 子句中提供的信息決定表數(shù)據(jù)的分區(qū)方式。這個(gè)可選子句的語(yǔ)法取決于是希望讓 DB2 在指定的表數(shù)據(jù)范圍內(nèi)均勻地生成每個(gè)分區(qū)范圍,還是要手工控制每個(gè)范圍的邊界。對(duì)于給定的表數(shù)據(jù)范圍自動(dòng)生成分區(qū)的語(yǔ)法是:

            PARTITION BY <RANGE> 
             ([ColumnName] <NULLS LAST | NULLS FIRST> ,...) 
             ( 
             STARTING <FROM> [Start | MINVALUE | MAXVALUE] | 
              STARTING <FROM> ([Start | MINVALUE | MAXVALUE] ,...) 
             <INCLUSIVE | EXCLUSIVE> 
             ENDING <AT> [End | MINVALUE | MAXVALUE] | 
              ENDING <AT> ([End | MINVALUE | MAXVALUE] ,...) 
             <INCLUSIVE | EXCLUSIVE> 
             EVERY <(>[Constant] <DurationLabel> <)> 
             ,...) 

              手工指定分區(qū)的語(yǔ)法是:

            PARTITION BY <RANGE>  
              ([ColumnName] <NULLS LAST | NULLS FIRST> ,...) 
              ( 
              <PARTITION [PartitionName]> 
             STARTING <FROM> [Start | MINVALUE | MAXVALUE] | 
              STARTING <FROM> ([Start | MINVALUE | MAXVALUE] ,...) 
             <INCLUSIVE | EXCLUSIVE> 
             ENDING <AT> [End | MINVALUE | MAXVALUE] | 
              ENDING <AT> ([End | MINVALUE | MAXVALUE] ,...) 
             <INCLUSIVE | EXCLUSIVE> 
              <IN [TSName]> 
              <INDEX IN [IndexTSName]> 
              <LONG IN [LongTSName]> 

              其中:

              ColumnName:用名稱指定一個(gè)或多個(gè)列(最多 16 列),這些列的值用來決定數(shù)據(jù)行應(yīng)該存儲(chǔ)在哪個(gè)數(shù)據(jù)分區(qū)中。(指定的列組成表的分區(qū)鍵 — 參見邊欄 “選擇表分區(qū)鍵”。)數(shù)據(jù)類型為 LONG VARCHAR、LONG VARGRAPHIC、BLOB、CLOB、DBCLOB、XML、基于這些數(shù)據(jù)類型的 distinct 類型和結(jié)構(gòu)化數(shù)據(jù)類型的列都不能作為數(shù)據(jù)分區(qū)鍵的組成部分。

              PartitionName:指定分配給要?jiǎng)?chuàng)建的數(shù)據(jù)分區(qū)的惟一名稱。

              Start:指定每個(gè)數(shù)據(jù)分區(qū)的范圍下限。

              End:指定每個(gè)數(shù)據(jù)分區(qū)的范圍上限。

              Constant:在使用語(yǔ)法的自動(dòng)生成形式時(shí),指定每個(gè)數(shù)據(jù)分區(qū)范圍的寬度。從 STARTING FROM 值開始創(chuàng)建數(shù)據(jù)分區(qū),數(shù)據(jù)分區(qū)的范圍內(nèi)包含指定數(shù)量的值。支持這種語(yǔ)法的條件是分區(qū)鍵由單一列組成,這一列的數(shù)據(jù)類型是數(shù)字、日期、時(shí)間或時(shí)間戳。

              DurationLabel:如果分區(qū)鍵列的數(shù)據(jù)類型是日期、時(shí)間或時(shí)間戳,這個(gè)參數(shù)指定與 Constant 值相關(guān)的時(shí)間單位。這個(gè)參數(shù)的有效值是:YEAR、YEARS、MONTH、MONTHS、DAY、DAYS、HOUR、HOURS、MINUTE、MINUTES、SECOND、SECONDS、MICROSECOND 和 MICROSECONDS。

              TSName:指定存儲(chǔ)每個(gè)數(shù)據(jù)分區(qū)的表空間。

              IndexTSName:指定存儲(chǔ)每個(gè)數(shù)據(jù)分區(qū)的分區(qū)索引的表空間。

              LongTSName:指定存儲(chǔ)長(zhǎng)列的值的表空間。

              注意:尖括號(hào) (< >) 中的參數(shù)是可選的;方括號(hào) ([ ]) 中的參數(shù)或選項(xiàng)是必需的,必須提供它們;逗號(hào)后面跟著省略號(hào) (...) 表示前面的參數(shù)可以重復(fù)出現(xiàn)多次。

              因此,如果希望創(chuàng)建一個(gè)名為 SALES 的分區(qū)表,把每個(gè)季度的數(shù)據(jù)存儲(chǔ)在單獨(dú)的分區(qū)中,每個(gè)分區(qū)駐留在不同的表空間中,那么可以執(zhí)行以下 CREATE TABLE 語(yǔ)句:

            CREATE TABLE sales 
             (sales_date  DATE, 
             sales_amt   NUMERIC(5,2)) 
             IN tbsp0, tbsp1, tbsp2, tbsp3 
             PARTITION BY RANGE (sales_date) 
              (STARTING '1/1/2010' ENDING '12/31/2010' 
              EVERY 3 MONTHS) 

              圖 1 說明生成的表是什么樣的。

            圖 1. 一個(gè)簡(jiǎn)單分區(qū)表中存儲(chǔ)的數(shù)據(jù)
            分布式 DBA: 創(chuàng)建和使用分區(qū)表

              另一方面,如果希望創(chuàng)建一個(gè)名為 INVENTORY 的分區(qū)表,把物品編號(hào)在 1 到 100 之間的行存儲(chǔ)在一個(gè)表空間中的一個(gè)分區(qū)中,把編號(hào)在 101 到 200 之間的行存儲(chǔ)在另一個(gè)表空間中的另一個(gè)分區(qū)中,以此類推,那么可以執(zhí)行下面的 SQL 語(yǔ)句:

            CREATE TABLE inventory 
              (item_no INT, 
              desc VARCHAR(20)) 
            PARTITION BY (item_no NULLS FIRST) 
            (PARTITION PRODUCE STARTING MINVALUE ENDING 100 IN tbsp0, 
            PARTITION DAIRY  STARTING    101 ENDING 200 IN tbsp1, 
            PARTITION BAKERY  STARTING    201 ENDING 300 IN tbsp2, 
            PARTITION MEAT   STARTING    301 ENDING 400 IN tbsp3) 

              選擇表分區(qū)鍵

              選擇有效的表分區(qū)鍵列對(duì)于發(fā)揮表分區(qū)的優(yōu)勢(shì)非常重要。最有效的表分區(qū)鍵列是有利于分區(qū)消除的列。例如,如果通常按日期查詢表中的記錄,那么應(yīng)該用日期或時(shí)間列進(jìn)行表分區(qū)。

              同樣,如果希望隨著時(shí)間的推移把表數(shù)據(jù)的一部分刪除或存檔,應(yīng)該根據(jù)期望的記錄存檔方式進(jìn)行表分區(qū)。例如,如果希望把三年前的所有數(shù)據(jù)都存檔,應(yīng)該按周、月或季度進(jìn)行表分區(qū),這樣就可以分別在每周、每月或每季度末刪除一個(gè)老分區(qū)。

              對(duì)于這個(gè)示例,ITEM_NO 值在 1 到 100 之間的行將存儲(chǔ)在名為 PRODUCE 的分區(qū)中(這個(gè)分區(qū)的數(shù)據(jù)寫到表空間 TBSP0 中),ITEM_NO 值在 101 到 200 之間的行將存儲(chǔ)在名為 DAIRY 的分區(qū)中(這個(gè)分區(qū)的數(shù)據(jù)寫到表空間 TBSP1 中),依次類推;ITEM_NO 值為 NULL 的行將存儲(chǔ)在 PRODUCE 分區(qū)中。

              一定要注意,當(dāng)指定 NULLS FIRST 選項(xiàng)時(shí),第一個(gè)分區(qū)必須從 MINVALUE 開始。(同樣,如果使用 NULLS LAST 選項(xiàng),最后一個(gè)分區(qū)必須結(jié)束于 MAXVALUE。)否則,在插入分區(qū)鍵列為 NULL 值的記錄時(shí),會(huì)產(chǎn)生 “data out of bounds” 錯(cuò)誤。另外,每個(gè)分區(qū)的數(shù)據(jù)、索引和長(zhǎng)列數(shù)據(jù)可以放在不同的表空間中。如果不為索引或長(zhǎng)列指定表空間,分區(qū)索引和長(zhǎng)列數(shù)據(jù)會(huì)存儲(chǔ)在與數(shù)據(jù)相同的表空間中。

             

              在默認(rèn)情況下,范圍包含邊界本身。要想防止在某一分區(qū)中存儲(chǔ)特定的記錄,可以用 EXCLUSIVE 選項(xiàng)創(chuàng)建范圍。例如:

            CREATE TABLE sales 
             (sales_date DATE, 
             sales_amt NUMERIC(5,2)) 
            IN tbsp0, tbsp1, tbsp2, tbsp3 
            PARTITION BY RANGE (sales_date) 
            (STARTING '1/1/2010' ENDING '3/31/2010' EXCLUSIVE,  
            STARTING '3/31/2010' ENDING '6/30/2010' EXCLUSIVE,  
            STARTING '6/30/2010' ENDING '9/30/2010' EXCLUSIVE,  
            STARTING '9/30/2010' ENDING '12/31/2010') 

              在這個(gè)示例中,銷售日期為 3/31/2010 的記錄不會(huì)存儲(chǔ)在表空間 TBSP0 中,而是存儲(chǔ)在表空間 TBSP1 中。

              當(dāng)在分區(qū)表中插入行時(shí),會(huì)根據(jù)鍵值及其所處的范圍自動(dòng)地把它放到適當(dāng)?shù)臄?shù)據(jù)分區(qū)中。如果鍵值不處于表的任何范圍內(nèi),插入操作就會(huì)失敗并產(chǎn)生一個(gè)錯(cuò)誤。

              輕松地移入和移出數(shù)據(jù)

              使用分區(qū)表的另一個(gè)優(yōu)點(diǎn)是,可以輕松地在表中添加新數(shù)據(jù)(作為新的數(shù)據(jù)分區(qū)),同時(shí)可以輕松地刪除并存檔老數(shù)據(jù)。在下一篇專欄文章中,我將講解添加(移入)和刪除(移出)數(shù)據(jù)分區(qū)的過程。還要討論 DB2 9.7 中的改進(jìn)如何大大加快移入和移出數(shù)據(jù)分區(qū)的速度,減少這些操作產(chǎn)生的干擾。

            亚洲人成无码www久久久| 99精品国产在热久久| 成人a毛片久久免费播放| 97久久国产亚洲精品超碰热| 精品久久久久久国产| 日日狠狠久久偷偷色综合0| 久久久久久国产精品美女| 亚洲国产精品无码久久久秋霞2| 国产精品久久久久久久人人看| 伊人久久精品无码二区麻豆| 久久狠狠色狠狠色综合| 久久精品国产亚洲AV不卡| 亚洲精品乱码久久久久久自慰| 久久青青草原综合伊人| 久久人人爽人人爽人人片av麻烦| 久久亚洲高清观看| 久久久国产精华液| 久久人人爽人人爽人人片AV东京热 | 久久精品极品盛宴观看| 国产人久久人人人人爽| 青青草原综合久久大伊人| 久久久久亚洲精品男人的天堂 | 久久久久久伊人高潮影院| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 久久精品青青草原伊人| 久久国产成人亚洲精品影院| 久久精品人人槡人妻人人玩AV| 久久www免费人成精品香蕉| 久久99久久99精品免视看动漫| 亚洲Av无码国产情品久久| 久久AAAA片一区二区| 久久精品国产精品亜洲毛片| 日韩欧美亚洲综合久久影院d3| 99久久中文字幕| 波多野结衣中文字幕久久| 久久国产欧美日韩精品| 久久精品国产亚洲AV香蕉| 东京热TOKYO综合久久精品| 久久久久免费精品国产| 91超碰碰碰碰久久久久久综合| 很黄很污的网站久久mimi色|