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

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

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

    posts - 30,  comments - 85,  trackbacks - 0

    數據分區消除指的是數據庫服務器根據查詢謂詞確定只需要訪問表的一部分數據分區就可以實現查詢的能力。當對分區表運行決策支持查詢時,數據分區消除可以提供特定好處。

    分區表使用了數據組織方案,即,表數據根據該表中一個或多個表分區鍵列中的值分布到多個存儲對象(稱為數據分區或范圍)中。根據 CREATE TABLE 語句的 PARTITION BY 子句中指定的內容,給定表的數據被劃分到多個存儲對象中。這些存儲對象可以在不同的表空間中,也可以在相同表空間中。

    以下示例演示了數據分區消除所產生的性能方面的好處。如果發出以下語句:

    CREATE TABLE custlist(subsdate DATE, Province CHAR(2), AccountID INT)
    PARTITION BY RANGE(subsdate)
    (STARTING FROM '1/1/1990' IN ts1,
    STARTING FROM '1/1/1991' IN ts1,
    STARTING FROM '1/1/1992' IN ts1,
    STARTING FROM '1/1/1993' IN ts2,
    STARTING FROM '1/1/1994' IN ts2,
    STARTING FROM '1/1/1995' IN ts2,
    STARTING FROM '1/1/1996' IN ts3,
    STARTING FROM '1/1/1997' IN ts3,
    STARTING FROM '1/1/1998' IN ts3,
    STARTING FROM '1/1/1999' IN ts4,
    STARTING FROM '1/1/2000' IN ts4,
    STARTING FROM '1/1/2001' ENDING '12/31/2001' IN ts4);

    假定您對 2000 年的客戶信息感興趣。如果發出以下查詢:

    SELECT * FROM custlist WHERE subsdate BETWEEN '1/1/2000' AND '12/31/2000'; 

    正如圖 101所顯示的那樣,數據庫服務器確定只需要訪問表空間 4(ts4)中的一個數據分區就可以解決此查詢。

    圖 101. 分區表上數據分區消除所產生的性能方面的好處
    數據庫服務器確定只需要訪問一部分數據分區就可以實現查詢。

    圖 102 中顯示的另一個數據分區消除示例是索引掃描,它涉及兩個索引并根據以下方案進行掃描:

    CREATE TABLE multi (sale_date date, region char(2))
    PARTITION BY (sale_date)
    (STARTING '01/01/2005' ENDING '12/31/2005' EVERY 1 MONTH);
    CREATE INDEX sx ON multi(sale_date);
    CREATE INDEX rx ON multi(region);

    如果發出以下查詢:

    SELECT * FROM multi WHERE
    sale_date BETWEEN '6/1/2005' AND '7/31/2005' AND REGION = 'NW';
    圖 102. 表分區和索引“與”(AND)的優化器決策路徑
    比較不使用表分區(索引“與”(AND))和使用表分區(數據分區消除)時的優化器決策路徑。

    在不使用表分區時,一種可能的方案是索引“與”(AND)。索引“與”(AND)執行下列任務:

    • 讀取每個索引中的所有相關索引條目
    • 保存兩組行標識(RID)
    • 匹配 RID 以確定哪些 RID 同時出現在這兩個索引中
    • 使用 RID 來訪存行

    圖 102 中所示,在使用表分區的情況下,讀取索引以查找 region 和 sale_date 的匹配項,從而允許快速檢索匹配行。

    DB2 說明

    還可以使用 DB2 說明來確定 DB2 優化器選擇的分區消除。DP Elim Predicates 信息顯示掃描了哪些數據分區來解決以下查詢:

     

    SELECT * FROM custlist WHERE subsdate
    BETWEEN '12/31/1999' AND '1/1/2001'
    Arguments:
    ---------
    DPESTFLG: (Number of data partitions accessed are Estimated)
    FALSE
    DPLSTPRT: (List of data partitions accessed)
    9-11
    DPNUMPRT: (Number of data partitions accessed)
    3
    DP Elim Predicates:
    ------------------
    Range 1)
    Stop  Predicate: (Q1.A <= '01/01/2001')
    Start Predicate: ('12/31/1999' <= Q1.A)
    Objects Used in Access Plan:
    ---------------------------
    Schema: MRSRINI
    Name: 		 CUSTLIST
    Type: 		 Data Partitioned Table
    Time of creation: 		 	 2005-11-30-14.21.33.857039
    Last statistics update: 		 2005-11-30-14.21.34.339392
    Number of columns: 		 	 3
    Number of rows: 		 	 100000
    Width of rows: 		 	 19
    Number of buffer pool pages: 		 1200
    Number of data partitions: 		 12
    Distinct row values: 		 	 No
    Tablespace name: 		 	 <VARIOUS>
    
    多列支持

    在使用多個列作為表分區鍵的情況下,數據分區消除將起作用。

    例如,如果發出以下語句:

    CREATE TABLE sales (year INT, month INT)
    PARTITION BY RANGE(year, month)
    (STARTING FROM (2001, 1) ENDING AT(2001,3) IN ts1,
    ENDING AT(2001,6) IN ts2,
    ENDING AT(2001,9) IN ts3,
    ENDING AT(2001,12) IN ts4,
    ENDING AT(2002,3) IN ts5,
    ENDING AT(2002,6) IN ts6,
    ENDING AT(2002,9) IN ts7,
    ENDING AT(2002,12) IN ts8)

    接著,發出以下查詢:

    	SELECT * FROM sales WHERE year = 2001 AND month < 8

    查詢優化器推斷只需要訪問 ts1、ts2 和 ts3 中的數據分區就可以解決此查詢。

    注:
    在多個列組成表分區鍵的情況下,只有當擁有組合鍵的前導列上的謂詞時才能實現數據分區消除,因為用于表分區鍵的非前導列不是獨立的。

     

    多范圍支持

    可以使用多個范圍在數據分區上實現數據分區消除(即,一起執行“或”(OR)運算)。通過使用上一個示例中創建的表,執行下列查詢:

    	SELECT * FROM sales
    WHERE (year = 2001 AND month <= 3) OR (year = 2002 and month >= 10)

    數據庫服務器只訪問 2001 年的第一季度和 2002 年的最后一個季度的數據。

    生成列

    可以將生成列用作表分區鍵。

    例如,可以發出以下語句:

    CREATE TABLE sales(a INT, b INT GENERATED ALWAYS AS (a / 5))
    IN ts1,ts2,ts3,ts4,ts5,ts6,ts7,ts8,ts9,ts10
    PARTITION BY RANGE(b)
    (STARTING FROM (0) ENDING AT(1000) EVERY (50))

    在此示例中,將生成列上的謂詞用于數據分區消除。此外,當用來生成列的表達式是單調的時,數據庫服務器會將源列上的謂詞轉換為生成列上的謂詞,從而在生成列上啟用數據分區消除。

    例如,如果具有以下查詢:

    	SELECT * FROM sales WHERE a > 35

    數據庫服務器根據(a > 35)在 b(b > 7)上生成額外謂詞,從而允許數據分區消除。

    連接謂詞

    如果將連接謂詞下推到表訪問級別,則也可以在數據分區消除中使用連接謂詞。連接謂詞僅在嵌套循環連接(NLJN)的內部才下推到表訪問級別。

    請考慮下列表:

    CREATE TABLE T1(A INT, B INT)
    PARTITION BY RANGE(A, B)
    (STARTING FROM (1, 1)
    ENDING (1,10) IN ts1, ENDING (1,20) IN ts2,
    ENDING (2,10) IN ts3, ENDING (2,20) IN ts4,
    ENDING (3,10) IN ts5, ENDING (3,20) IN ts6,
    ENDING (4,10) IN ts7, ENDING (4,20) IN ts8)
    CREATE TABLE T2 (A INT, B INT)

    使用的謂詞有:

    P1: T1.A = T2.A
    P2: T1.B > 15

    在此示例中,由于不知道連接的外值,因此不能確定將在編譯時訪問的額外數據分區。在這種情況下,以及在使用主變量或參數標記的情況下,當綁定必需的值時,就會發生數據分區消除。

    在運行時,當 T1 是 NLJN 的內部表時,會根據 T2.A 的每個外值的謂詞自動進行數據分區消除。在運行時,對外值 T2.A = 3 應用謂詞 T1.A = 3 和 T1.B > 15,這樣就限定了訪問的表空間 ts6 和 ts7 中的數據分區

    考慮表 T1 和 T2 中的列 A 具有下列值:

    外部表 T2:列 A 內部表 T1:列 A 內部表 T1:列 B 內部表 T1:數據分區位置
    2 3 20 ts6
    3 2 10 ts3
    3 2 18 ts4
    3 15 ts6
    1 40 ts3

    要執行嵌套循環連接(假定對內部表進行表掃描),數據庫管理器執行下列步驟:

    1. 讀取 T2 中的第一行。A 的值是 2。
    2. 在連接謂詞 T1.A = T2.A 中將 T2.A 值(它是 2)綁定到列 T2.A。該謂詞就變成 T1.A = 2。
    3. 使用謂詞 T1.A = 2 和 T1.B > 15 應用數據分區消除。這將限定表空間 ts4 和 ts5 中的數據分區
    4. 在應用 T1.A = 2 和 T1.B > 15 之后,掃描表 T1 的表空間 ts4 和 ts5 中的數據分區,直到找到一行為止。找到的第一個合格行是 T1 的行 3。
    5. 連接匹配的行。
    6. 掃描表 T1 的表空間 ts4 和 ts5 中的數據分區,直到找到下一個匹配項(T1.A = 2 和 T1.B > 15)為止。再也找不到其他行。
    7. 對 T2 的下一行(將 A 的值替換為 3)重復步驟 1 至 6,直到用完 T2 中的所有行為止。
    posted on 2007-08-21 10:44 安文豪 閱讀(1192) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    <2007年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(6)

    隨筆檔案(28)

    文章分類(3)

    文章檔案(4)

    最新隨筆

    搜索

    •  

    積分與排名

    • 積分 - 86469
    • 排名 - 666

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产av无码专区亚洲av果冻传媒| 国产大片线上免费看| 国产亚洲精品a在线无码| 一级做a爰片久久毛片免费看| 国产免费爽爽视频免费可以看| 无码天堂亚洲国产AV| 国产jizzjizz视频免费看| 久久久久久久久无码精品亚洲日韩| 免费看美女让人桶尿口| 国产偷国产偷亚洲高清在线| 免费va在线观看| 中文字幕一区二区免费| 亚洲激情中文字幕| 91麻豆最新在线人成免费观看| 亚洲人成77777在线播放网站不卡| 最近中文字幕mv免费高清电影 | 久久亚洲国产精品五月天| 男人j进入女人j内部免费网站| 亚洲小视频在线观看| 大学生高清一级毛片免费| 美女视频免费看一区二区| 国产成人综合亚洲AV第一页| 亚欧免费无码aⅴ在线观看| 亚洲乱码在线视频| 九月婷婷亚洲综合在线| 久久青草91免费观看| 亚洲成年网站在线观看| 免费又黄又爽的视频| 人人揉揉香蕉大免费不卡| 色在线亚洲视频www| 五月婷婷亚洲综合| 足恋玩丝袜脚视频免费网站| 精品亚洲成a人在线观看| 久久亚洲综合色一区二区三区| 人成午夜免费视频在线观看| 成人嫩草影院免费观看| 亚洲人成7777影视在线观看| AV在线播放日韩亚洲欧| 国产va精品免费观看| 香蕉免费看一区二区三区| 亚洲中文字幕AV每天更新|