<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 安文豪 閱讀(1194) 評論(0)  編輯  收藏

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


    網站導航:
     

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

    常用鏈接

    留言簿(6)

    隨筆檔案(28)

    文章分類(3)

    文章檔案(4)

    最新隨筆

    搜索

    •  

    積分與排名

    • 積分 - 86493
    • 排名 - 666

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩免费人妻AV无码专区蜜桃| 亚洲AV无码精品国产成人| 精品国产污污免费网站入口在线| 一级毛片直播亚洲| 思思久久99热免费精品6| 亚洲精品国精品久久99热| 黄色视频在线免费观看| 国产亚洲美女精品久久久久狼| 免费国产成人午夜在线观看| 亚洲AV无码一区二区乱孑伦AS| 嫩草成人永久免费观看| 亚洲成a人片在线网站| 国产福利在线观看免费第一福利| 亚洲欧美日韩久久精品| 免费a级毛片无码a∨性按摩| 一本大道一卡二大卡三卡免费| 亚洲成亚洲乱码一二三四区软件| 99精品视频在线观看免费专区 | 亚洲国产成人乱码精品女人久久久不卡| 国产亚洲综合视频| 亚洲欭美日韩颜射在线二| 免费看男人j放进女人j免费看| 亚洲精品亚洲人成在线观看麻豆| 成年女人18级毛片毛片免费观看| 色综合久久精品亚洲国产| 在线观看亚洲成人| 99在线观看视频免费| 亚洲色偷偷色噜噜狠狠99网| 亚洲国产精品13p| 99精品视频在线视频免费观看 | 日韩成人毛片高清视频免费看| 国产日产亚洲系列最新| 91视频免费网址| 亚洲AV无码一区二区三区牲色 | 亚洲国产精品一区二区三区在线观看| 国产老女人精品免费视频| 最近国语视频在线观看免费播放| 亚洲乱人伦精品图片| 亚洲日本中文字幕一区二区三区| 一级毛片全部免费播放| 日韩色日韩视频亚洲网站|