日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MPP数据库分区表详解

發布時間:2024/1/1 数据库 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MPP数据库分区表详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文介紹的MPP數據庫是greenplum database,根據gp官網介紹gp支持大表分區。
參考文獻:gp官網
一、分區的目的:提高查詢效率

  • 把大數據切片,便于查詢;
  • 便于數據庫維護;
  • 二、 分區類型

  • 范圍分區 range partition
  • 列表分區 list partition
  • 組合分區
  • 三、 分區策略
    1.表是否足夠大?
    大事實表可以選擇分區。如果一個表有幾百萬或10億數據量,你可以看到性能上的優勢。
    如果只是幾千行或者更小的表的話,dba將在維護分區花費大量的精力,小表不要建分區,直接fulltable scan。

    2.是否對現有性能不滿意?
    當表的查詢響應時間比預期要慢的話,可以考慮用分區表

    3.是否能夠判斷查詢可以使用固定范圍或固定值來做限定條件?
    where子句中是否使用分區字段。
    例如:經常按日志來查詢,可以按月或周來范圍分區。或按地區來查的話,可以按地區來做列表分區。

    4.是否需要維護你數據倉庫中的大量歷史記錄?
    分區設計另外一個考量是根據業務要求來決定歷史數據的保存。
    例如:數據倉庫只要保留過去12個月的數據。如果是按月分區的話,你很容易刪掉歷史分區并載入數據到當前幾個月份中。

    5.是否能基于一些定義規則將數據分成等份?
    你應該選擇盡可能的將數據等分。如果分區中包含等數量記錄,則查詢性能提升基于已創建的分區數量。
    例如:一個大表被分成10個分區,執行一個查詢將比非分區表快10倍。

    四、具體語句

    [時間范圍分區]
    兩中創建方式:
    (1)CREATE TABLE sales (id int, date date, amtdecimal(10,2))
    DISTRIBUTED BY (id)
    PARTITION BY RANGE(date)
    ( START (date ‘2008-01-01’)INCLUSIVE
    END (date’2009-01-01’) EXCLUSIVE
    EVERY (INTERVAL’1 day’) ); --時間間隔

    (2)CREATE TABLE sales (id int, date date,amt decimal(10,2))
    DISTRIBUTED BY (id)
    PARTITION BY RANGE(date)
    ( PARTITION Jan08 START(date ‘2008-01-01’) INCLUSIVE ,
    PARTITION Feb08 START(date ‘2008-02-01’) INCLUSIVE ,
    PARTITION Mar08 START(date ‘2008-03-01’) INCLUSIVE ,
    PARTITION Apr08 START(date ‘2008-04-01’) INCLUSIVE ,
    PARTITION May08 START(date ‘2008-05-01’) INCLUSIVE ,
    PARTITION Jun08 START(date ‘2008-06-01’) INCLUSIVE ,
    PARTITION Jul08 START(date ‘2008-07-01’) INCLUSIVE ,
    PARTITION Aug08 START(date ‘2008-08-01’) INCLUSIVE ,
    PARTITION Sep08 START(date ‘2008-09-01’) INCLUSIVE ,
    PARTITION Oct08 START(date ‘2008-10-01’) INCLUSIVE ,
    PARTITION Nov08 START(date ‘2008-11-01’) INCLUSIVE ,
    PARTITION Dec08 START(date ‘2008-12-01’) INCLUSIVE
    END (date ‘2009-01-01’)EXCLUSIVE ); --在最后要寫個end

    [數字范圍分區]
    (1)CREATE TABLE rank (id int, rank int, yearint, gender
    char(1), count int)
    DISTRIBUTED BY (id)
    PARTITION BY RANGE(year)
    ( START (2001) END(2008) EVERY (1),
    DEFAULT PARTITION extra);
    [列表分區]
    (1)CREATE TABLE rank (id int, rank int, yearint, gender
    char(1), count int )
    DISTRIBUTED BY (id)
    PARTITION BY LIST(gender) --可以使用多列
    ( PARTITION girlsVALUES (‘F’),
    PARTITIONboys VALUES (‘M’),
    DEFAULT PARTITION other);

    ------多級分區------
    (1)CREATE TABLE sales (id int, year int,month int, day int,region text)
    DISTRIBUTED BY (id)
    PARTITION BY RANGE (year)
    SUBPARTITION BYRANGE (month)
    SUBPARTITIONTEMPLAT
    (
    START(1) END (13) EVERY (1),
    DEFAULTSUBPARTITION other_months
    )
    SUBPARTITION BYLIST (region)
    SUBPARTITIONTEMPLATE
    (
    SUBPARTITIONusa VALUES (‘usa’),
    SUBPARTITIONeurope VALUES (‘europe’),
    SUBPARTITIONasia VALUES (‘asia’),
    DEFAULTSUBPARTITION other_regions
    )
    ( START (2002) END(2010) EVERY (1),
    DEFAULTPARTITION outlying_years
    );

    ------選擇性分區掃描的一些限制-----

    限制條件:

  • 條件中使用簡單直接的限制操作符(如:= < <= > >= <>),可以選擇性掃描分區

  • 不能識別變化性函數,只能是固定值

    例如:where語句中 date >current_date可以做范圍掃描。 但是time > timeofday則不行。

  • 不確定的值是無法做runtime評估,必須要指定明確的值

    例如:SELECT * frompartition_table PT, other_table OT WHERE

    PT.id=OT.idand OT.some_column = 'value';--value必須指定值
  • ------查看表分區-------

    pg_partitions - 查看創建分區信息
    pg_partition_templates -查看是用subpartition模板創建的子分區
    pg_partition_column - 查看分區字段

    select * from pg_partitions where tablename=‘sales’

    總結

    以上是生活随笔為你收集整理的MPP数据库分区表详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。