• <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++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            fragment on db2 and informix

            Posted on 2012-03-05 22:57 Prayer 閱讀(910) 評論(0)  編輯 收藏 引用 所屬分類: DB2
            http://hi.baidu.com/shenqb/blog/item/1c9ea8de8894644fccbf1aa1.html

            轉(zhuǎn)載自 koolkite
            最終編輯 koolkite
            表分區(qū)功能是一種數(shù)據(jù)組織方案,即,表數(shù)據(jù)根據(jù)一個或多個表列中的值分布到多個存儲對象(稱為數(shù)據(jù)分區(qū)或范圍)中。每個數(shù)據(jù)分區(qū)都是單獨存儲的。這 些存儲對象可以在不同的表空間中,也可以在相同表空間中。按照 CREATE TABLE 語句的 PARTITION BY 子句中指定那樣將表數(shù)據(jù)分區(qū)。此定義中使用的列被稱為表分區(qū)鍵列。DB2 表分區(qū)功能與 Informix® Dynamic Server 和 Informix Extended Parallel Server 提供的數(shù)據(jù)分段組織方法相對應(yīng)。
            Informix 方法

            Informix 支持若干種數(shù)據(jù)組織方案,在 Informix 產(chǎn)品中,這些方案稱為分段。其中一種較常使用的分段類型是 FRAGMENT BY EXPRESSION。這種類型的分段的工作方式與 CASE 語句非常相似,其中有一個與表的每個分段相關(guān)聯(lián)的表達式。檢查這些表達式以便確定行的放置位置。

            Informix 與 DB2 數(shù)據(jù)庫系統(tǒng)的比較

            DB2 數(shù)據(jù)庫提供了豐富的補充功能,這些功能與 Informix 數(shù)據(jù)組織方案直接對應(yīng),這使客戶能夠相對容易地從 Informix 語法轉(zhuǎn)換為 DB2 語法。DB2 數(shù)據(jù)庫管理器將生成列與 CREATE TABLE 語句的 PARTITION BY RANGE 子句配合使用,以處理復(fù)雜的 Informix 方案。表 78 對 Informix 和 DB2 數(shù)據(jù)庫產(chǎn)品中使用的數(shù)據(jù)組織方案作了比較。

             

            表 78. 所有 Informix 與 DB2 數(shù)據(jù)組織方案的映射
            數(shù)據(jù)組織方案 Informix 語法 DB2 版本 9.1 語法
            • Informix:基于表達式
            • DB2:表分區(qū)
            FRAGMENT BY EXPRESSION PARTITION BY RANGE
            • Informix:循環(huán)法
            • DB2:缺省
            FRAGMENT BY ROUND ROBIN 沒有語法:DB2 數(shù)據(jù)庫管理器自動在容器之間分布數(shù)據(jù)
            • Informix:范圍分布
            • DB2:表分區(qū)
            FRAGMENT BY RANGE PARTITION BY RANGE
            • Informix:系統(tǒng)定義的散列
            • DB2:數(shù)據(jù)庫分區(qū)
            FRAGMENT BY HASH DISTRIBUTE BY HASH
            • Informix:HYBRID
            • DB2:在進行表分區(qū)的情況下進行數(shù)據(jù)庫分區(qū)
            FRAGMENT BY HYBRID DISTRIBUTE BY HASH 和 PARTITION BY RANGE
            • Informix:不適用
            • DB2:多維集群
            不適用 ORGANIZE BY DIMENSION
            示例

            下列示例詳細說明了在 DB2 中如何實現(xiàn)與任何使用表達式的 Informix 分段方案等同的結(jié)果。

            示例 1:下面這個基本的 Create Table 語句顯示了 Informix 分段以及等同的 DB2 數(shù)據(jù)庫系統(tǒng)表分區(qū)語法:

            Informix 語法:

            CREATE TABLE demo(a INT) FRAGMENT BY EXPRESSION
            a = 1 IN db1,
            a = 2 IN db2,
            a = 3 IN db3;

            DB2 語法:

            CREATE TABLE demo(a INT) PARTITION BY RANGE(a)
            (STARTING(1) IN db1,
            STARTING(2) IN db2,
            STARTING(3) ENDING(3) IN db3);

            Informix XPS 支持稱為 hybrid 的兩層分段方案,在此方案中,使用一個表達式來在協(xié)作服務(wù)器之間分布數(shù)據(jù),并使用第二個表達式來在協(xié)作服務(wù)器內(nèi)分布數(shù)據(jù)。這使所有協(xié)作服務(wù)器都能夠參與查 詢(即,在所有協(xié)作服務(wù)器上都有數(shù)據(jù)),并使查詢能夠利用數(shù)據(jù)分區(qū)消除功能的優(yōu)勢。

            通過結(jié)合使用 CREATE TABLE 語句的 DISTRIBUTE BY 和 PARTITION BY 子句,DB2 數(shù)據(jù)庫系統(tǒng)實現(xiàn)了與 Informix hybrid 等同的組織方案。

            示例 2:以下示例顯示了組合子句的語法:

            Informix 語法

            CREATE TABLE demo(a INT, b INT) FRAGMENT BY HYBRID HASH(a)
            EXPRESSION b = 1 IN dbsl1,
            b = 2 IN dbsl2;

            DB2 語法

            CREATE TABLE demo(a INT, b INT) IN dbsl1, dbsl2
            DISTRIBUTE BY HASH(a),
            PARTITION BY RANGE(b) (STARTING 1 ENDING 2 EVERY 1);

            此外,可以使用多維集群來進一步組織數(shù)據(jù):

            CREATE TABLE demo(a INT, b INT, c INT) IN dbsl1, dbsl2
            DISTRIBUTE BY HASH(a),
            PARTITION BY RANGE(b) (STARTING 1 ENDING 2 EVERY 1)
            ORGANIZE BY DIMENSIONS(c);

            這樣,列 a 值相同的所有行都在同一個數(shù)據(jù)庫分區(qū)中。所有列 b 值相同的行都在同一個表空間中。對于具有給定的 ab 值的行,會將再具有相同 c 值的所有行集中到一個磁盤上。此方法非常適合于 OLAP 類型的下尋操作,這是因為,僅需掃描單個數(shù)據(jù)庫分區(qū)上單個表空間中的一個或數(shù)個擴展數(shù)據(jù)塊就可以滿足此類查詢。

            應(yīng)用表分區(qū)以解決常見的應(yīng)用程序問題

            下列各節(jié)討論如何應(yīng)用各種 DB2 表分區(qū)功能以解決常見的應(yīng)用程序問題。每一節(jié)都特別側(cè)重于采取最佳措施來將各種 Informix 分段方案映射到等同的 DB2 表分區(qū)方案。

            創(chuàng)建簡單數(shù)據(jù)分區(qū)范圍時的注意事項

            其中一種最常見的表分區(qū)應(yīng)用是根據(jù)日期鍵對大型事實表進行分區(qū)。如果需要創(chuàng)建大小統(tǒng)一的日期范圍,請考慮使用自動生成的 CREATE TABLE 語法格式。

            示例

            示例 1:以下示例顯示自動生成的語法格式:

            CREATE TABLE orders
            (
            l_orderkey DECIMAL(10,0) NOT NULL,
            l_partkey INTEGER,
            l_suppkey INTEGER,
            l_linenumber INTEGER,
            l_quantity DECIMAL(12,2),
            l_extendedprice DECIMAL(12,2),
            l_discount DECIMAL(12,2),
            l_tax DECIMAL(12,2),
            l_returnflag CHAR(1),
            l_linestatus CHAR(1),
            l_shipdate DATE,
            l_commitdate DATE,
            l_receiptdate DATE,
            l_shipinstruct CHAR(25),
            l_shipmode CHAR(10),
            l_comment VARCHAR(44))
            PARTITION BY RANGE(l_shipdate)
            (STARTING '1/1/1992' ENDING '12/31/1993' EVERY 1 MONTH);

            這將創(chuàng)建 24 個范圍,即對 1992-1993 的每個月創(chuàng)建一個范圍。嘗試插入 l_shipdate 超出該范圍的行將導(dǎo)致錯誤。

            示例 2:將上一示例與以下 Informix 語法作比較:

            create table orders
            (
            l_orderkey decimal(10,0) not null,
            l_partkey integer,
            l_suppkey integer,
            l_linenumber integer,
            l_quantity decimal(12,2),
            l_extendedprice decimal(12,2),
            l_discount decimal(12,2),
            l_tax decimal(12,2),
            l_returnflag char(1),
            l_linestatus char(1),
            l_shipdate date,
            l_commitdate date,
            l_receiptdate date,
            l_shipinstruct char(25),
            l_shipmode char(10),
            l_comment varchar(44)
            ) fragment by expression
            l_shipdate < '1992-02-01' in ldbs1,
            l_shipdate >= '1992-02-01' and l_shipdate < '1992-03-01' in ldbs2,
            l_shipdate >= '1992-03-01' and l_shipdate < '1992-04-01' in ldbs3,
            l_shipdate >= '1992-04-01' and l_shipdate < '1992-05-01' in ldbs4,
            l_shipdate >= '1992-05-01' and l_shipdate < '1992-06-01' in ldbs5,
            l_shipdate >= '1992-06-01' and l_shipdate < '1992-07-01' in ldbs6,
            l_shipdate >= '1992-07-01' and l_shipdate < '1992-08-01' in ldbs7,
            l_shipdate >= '1992-08-01' and l_shipdate < '1992-09-01' in ldbs8,
            l_shipdate >= '1992-09-01' and l_shipdate < '1992-10-01' in ldbs9,
            l_shipdate >= '1992-10-01' and l_shipdate < '1992-11-01' in ldbs10,
            l_shipdate >= '1992-11-01' and l_shipdate < '1992-12-01' in ldbs11,
            l_shipdate >= '1992-12-01' and l_shipdate < '1993-01-01' in ldbs12,
            l_shipdate >= '1993-01-01' and l_shipdate < '1993-02-01' in ldbs13,
            l_shipdate >= '1993-02-01' and l_shipdate < '1993-03-01' in ldbs14,
            l_shipdate >= '1993-03-01' and l_shipdate < '1993-04-01' in ldbs15,
            l_shipdate >= '1993-04-01' and l_shipdate < '1993-05-01' in ldbs16,
            l_shipdate >= '1993-05-01' and l_shipdate < '1993-06-01' in ldbs17,
            l_shipdate >= '1993-06-01' and l_shipdate < '1993-07-01' in ldbs18,
            l_shipdate >= '1993-07-01' and l_shipdate < '1993-08-01' in ldbs19,
            l_shipdate >= '1993-08-01' and l_shipdate < '1993-09-01' in ldbs20,
            l_shipdate >= '1993-09-01' and l_shipdate < '1993-10-01' in ldbs21,
            l_shipdate >= '1993-10-01' and l_shipdate < '1993-11-01' in ldbs22,
            l_shipdate >= '1993-11-01' and l_shipdate < '1993-12-01' in ldbs23,
            l_shipdate >= '1993-12-01' and l_shipdate < '1994-01-01' in ldbs24,
            l_shipdate >= '1994-01-01' in ldbs25;

            注意,Informix 語法提供了上下不封頂?shù)姆秶圆东@預(yù)期范圍外的日期。通過添加使用 MINVALUE 和 MAXVALUE 的范圍,可以將 DB2 語法修改為與 Informix 語法匹配。

            示例 3:以下示例將示例 1 修改為與 Informix 語法匹配:

            CREATE TABLE orders
            (
            l_orderkey DECIMAL(10,0) NOT NULL,
            l_partkey INTEGER,
            l_suppkey INTEGER,
            l_linenumber INTEGER,
            l_quantity DECIMAL(12,2),
            l_extendedprice DECIMAL(12,2),
            l_discount DECIMAL(12,2),
            l_tax DECIMAL(12,2),
            l_returnflag CHAR(1),
            l_linestatus CHAR(1),
            l_shipdate DATE,
            l_commitdate DATE,
            l_receiptdate DATE,
            l_shipinstruct CHAR(25),
            l_shipmode CHAR(10),
            l_comment VARCHAR(44)
            ) PARTITION BY RANGE(l_shipdate)
            (STARTING MINVALUE,
            STARTING '1/1/1992' ENDING '12/31/1993' EVERY 1 MONTH,
            ENDING MAXVALUE);

            這種技術(shù)允許將任何日期插入到表中。

            使用生成列按表達式進行分區(qū)

            雖然 DB2 數(shù)據(jù)庫并不直接支持按表達式進行分區(qū),但支持按生成列進行分區(qū),因此有可能獲得相同的結(jié)果。

            在決定是否使用此方法前,請考慮下列用法準(zhǔn)則:

            • 生成列是真實的列,它占用物理磁盤空間。使用生成列的表會略微變大。
            • 對于在分區(qū)表進行分區(qū)時所基于的列,不能改變其生成列表達式。嘗試執(zhí)行此操作將產(chǎn)生消息 SQL0190。如果按下一節(jié)描述的方式將新數(shù)據(jù)分區(qū)添加到使用生成列的表中,通常要求改變定義生成列的表達式。目前,不支持改變定義生成列的表達式。
            • 當(dāng)表使用生成列時,對于何時可以應(yīng)用數(shù)據(jù)分區(qū)消除是有限制的。
            示例

            示例 1:以下示例使用 Informix 語法,在這種情況下適合使用生成列。在本示例中,進行分區(qū)時所基于的列存放了加拿大的省和地域。由于省列表不大可能更改,因此生成列表達式也不大可能更改。

            CREATE TABLE customer (
            cust_id INT,
            cust_prov CHAR(2))
            FRAGMENT BY EXPRESSION
            cust_prov = "AB" IN dbspace_ab
            cust_prov = "BC" IN dbspace_bc
            cust_prov = "MB" IN dbspace_mb
            ...
            cust_prov = "YT" IN dbspace_yt
            REMAINDER IN dbspace_remainder;

            示例 2:在此示例中,使用生成列對 DB2 表進行分區(qū):

            CREATE TABLE customer (
            cust_id INT,
            cust_prov CHAR(2),
            cust_prov_gen GENERATED ALWAYS AS (CASE
            WHEN cust_prov = 'AB' THEN 1
            WHEN cust_prov = 'BC' THEN 2
            WHEN cust_prov = 'MB' THEN 3
            ...
            WHEN cust_prov = 'YT' THEN 13
            ELSE 14 END))
            IN tbspace_ab, tbspace_bc, tbspace_mb, .... tbspace_remainder
            PARTITION BY RANGE (cust_prov_gen)
            (STARTING 1 ENDING 14 EVERY 1);

            這里,CASE 語句中的表達式與 FRAGMENT BY EXPRESSION 子句中的相應(yīng)表達式匹配。CASE 語句將每個原始表達式映射到一個數(shù)字,該數(shù)字存儲在生成列(在本示例中是 cust_prov_gen)中。此列是存儲在磁盤上的真實列,因此,表占用的空間量會比 DB2® 通過表達式直接支持的分區(qū)所必需的空間量略多。本示例使用短語法格式。因此,必須在 CREATE TABLE 語句的 IN 子句中列示用來放置數(shù)據(jù)分區(qū)的表空間。如果使用長語法格式,則每個數(shù)據(jù)分區(qū)都需要不同的 IN 子句。

            久久久久精品国产亚洲AV无码| 欧美性大战久久久久久| 久久久久久久久久免免费精品| 久久久久亚洲Av无码专| 伊人 久久 精品| 亚洲精品国产自在久久| 久久97久久97精品免视看| 99久久无码一区人妻| 国产精品青草久久久久婷婷| 久久久噜噜噜www成人网| 亚洲av日韩精品久久久久久a | 99久久国产综合精品女同图片| 国内精品久久久久久久久电影网| 国内精品久久国产大陆| 久久精品国产影库免费看 | 国产精品久久久久久影院 | 久久久久亚洲AV无码专区体验| 亚洲伊人久久大香线蕉综合图片| 久久久久亚洲AV成人网人人网站| 久久久久国产精品人妻| 久久www免费人成看片| 久久精品国产2020| MM131亚洲国产美女久久| www.久久热.com| 久久91精品综合国产首页| 久久婷婷五月综合色99啪ak| 狠狠色丁香久久婷婷综合图片| 精品久久久久久无码不卡| 精品久久久无码中文字幕天天| 色狠狠久久AV五月综合| 国产亚洲精品自在久久| 国产精品九九久久免费视频 | 国产亚洲精午夜久久久久久| 亚洲av日韩精品久久久久久a| 欧美久久综合九色综合| 久久久青草青青国产亚洲免观| 亚洲一本综合久久| 国产精品久久新婚兰兰| 久久久WWW成人| 久久久精品波多野结衣| 狠狠精品久久久无码中文字幕|