日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

AnalyticDB PostgreSQL版7.0分區(qū)表

AnalyticDB PostgreSQL 7.0版對分區(qū)表的功能進(jìn)行了擴(kuò)展和增強(qiáng)。在AnalyticDB PostgreSQL 6.0版基礎(chǔ)上,新增了對哈希(HASH)分區(qū)和表達(dá)式分區(qū)的支持,并兼容了PostgreSQL12.0版創(chuàng)建分區(qū)表和管理分區(qū)表的語法。

分區(qū)表使用

將大表定義為分區(qū)表,從而將其分成較小的存儲單元,根據(jù)查詢條件,會只掃描滿足條件的分區(qū)而避免全表掃描,從而顯著提升查詢性能。詳細(xì)內(nèi)容,請參見AnalyticDB PostgreSQL版6.0分區(qū)表

創(chuàng)建范圍(RANGE)分區(qū)表

您可以先創(chuàng)建范圍(RANGE)分區(qū)表,再為該分區(qū)表添加子分區(qū),例如:

-- 創(chuàng)建分區(qū)表
CREATE TABLE sales (id int, date date, amt decimal(10,2))
DISTRIBUTED BY (id)
PARTITION BY RANGE (date);

-- 添加子分區(qū)
CREATE TABLE sales_20160101 PARTITION OF sales
FOR VALUES FROM('2016-01-01') TO ('2016-01-02');

您可以通過給出一個START值、一個END值以及一個定義分區(qū)增量值的子句讓數(shù)據(jù)庫自動產(chǎn)生分區(qū)。默認(rèn)情況下,START值總是被包括在內(nèi)而END值總是被排除在外,例如:

CREATE TABLE sales (id int, date date, amt decimal(10,2))
DISTRIBUTED BY (id)
PARTITION BY RANGE (date)
(START (date '2016-01-01') INCLUSIVE
END (date '2017-01-01') EXCLUSIVE
EVERY (INTERVAL '1 day'));

您也可以創(chuàng)建一個按數(shù)字范圍分區(qū)的表,使用同種數(shù)據(jù)類型列作為其分區(qū)鍵列,例如:

CREATE TABLE rank (id int, rank int, year int, gender char(1), count int)
DISTRIBUTED BY (id)
PARTITION BY RANGE (year)
(START (2006) END (2016) EVERY (1), 
DEFAULT PARTITION extra); 

創(chuàng)建值 (LIST) 分區(qū)表

您可以先創(chuàng)建值(LIST)分區(qū)表,再為該分區(qū)表添加子分區(qū),例如:

-- 創(chuàng)建分區(qū)表
CREATE TABLE rank (id int, rank int, year int, gender 
char(1), count int) 
DISTRIBUTED BY (id)
PARTITION BY LIST (gender);

-- 添加子分區(qū)
CREATE TABLE rank_girls PARTITION OF rank FOR VALUES IN ('F');

按列表分區(qū)的表可以使用同種數(shù)據(jù)類型列作為其分區(qū)鍵列。對于列表分區(qū),您必須為每個要創(chuàng)建的分區(qū)(列表值)聲明一個分區(qū)說明,例如:

CREATE TABLE rank (id int, rank int, year int, gender 
char(1), count int) 
DISTRIBUTED BY (id)
PARTITION BY LIST (gender)
(PARTITION girls VALUES ('F'), 
PARTITION boys VALUES ('M'), 
DEFAULT PARTITION other);

創(chuàng)建哈希 (HASH) 分區(qū)表

哈希分區(qū)會基于分區(qū)鍵的哈希值決定數(shù)據(jù)所在的子分區(qū)。您可以先創(chuàng)建哈希 (HASH)分區(qū)表,再為該分區(qū)表添加子分區(qū)。為哈希分區(qū)表添加子分區(qū)時,MODULUS子句用于指定除數(shù),REMAINDER子句用于指定哈希值被除后的余數(shù)。

說明

為防止因分區(qū)不存在而插入數(shù)據(jù)失敗,建議在創(chuàng)建哈希分區(qū)表后,立即添加分區(qū)表下所有的子分區(qū)。

-- 創(chuàng)建分區(qū)表
CREATE TABLE orders (id int, order_date date, customer_id int, amount decimal)
DISTRIBUTED BY (id)
PARTITION BY HASH (customer_id);

-- 添加子分區(qū)
CREATE TABLE orders_p0 PARTITION OF orders FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE orders_p1 PARTITION OF orders FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE orders_p2 PARTITION OF orders FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE orders_p3 PARTITION OF orders FOR VALUES WITH (MODULUS 4, REMAINDER 3);

云原生數(shù)據(jù)倉庫AnalyticDB PostgreSQL版使用了內(nèi)置的哈希函數(shù)對分區(qū)鍵值求取哈希值,提供了系統(tǒng)函數(shù)satisfies_hash_partition供您查詢某個值是否在給定的子分區(qū)中。以下SQL語句為查詢public.orders表中customer_id=2的數(shù)據(jù)是否在MODULUS 4, REMAINDER 0這個子分區(qū)內(nèi)。

SELECT satisfies_hash_partition('public.orders'::regclass, 4, 0, variadic ARRAY[2]); 
重要

哈希 (HASH) 分區(qū)表暫不支持在建表時同步創(chuàng)建子分區(qū)。

創(chuàng)建表達(dá)式分區(qū)表

AnalyticDB PostgreSQL 7.0版支持表達(dá)式分區(qū),更加靈活易用。

-- 創(chuàng)建分區(qū)表-- 
CREATE TABLE sales (id int, sale_time timestamp, amt decimal(10,2))
DISTRIBUTED BY (id)
PARTITION BY LIST (date_trunc('month', sale_time));

-- 添加子分區(qū)
CREATE TABLE sales_202401 PARTITION OF sales FOR VALUES IN('2024-01-01'::timestamp);

創(chuàng)建多級分區(qū)表

支持創(chuàng)建多級的分區(qū)表。下述建表語句創(chuàng)建了具有三級表分區(qū)的表。一級分區(qū)在month字段上做RANGE分區(qū),二級分區(qū)在region上做了LIST分區(qū)。

CREATE TABLE sales(id int, year int, month int, day int, region text)
DISTRIBUTED BY (id)
PARTITION BY RANGE (month)
  SUBPARTITION BY LIST (region)
    SUBPARTITION TEMPLATE (
    SUBPARTITION usa VALUES ('usa'),
    SUBPARTITION europe VALUES ('europe'),
    SUBPARTITION asia VALUES ('asia'),
    DEFAULT SUBPARTITION other_regions)
(START (1) END (13) EVERY (1), 
DEFAULT PARTITION other_months);

分區(qū)表查詢優(yōu)化

  • 分區(qū)粒度

    通常分區(qū)表的定義都涉及到粒度問題,比如按時間分區(qū),究竟是按天,按周,按月等。粒度越細(xì),每張表的數(shù)據(jù)就越少,但是分區(qū)的數(shù)量就越多,反之亦然。關(guān)于分區(qū)的數(shù)量,沒有絕對的標(biāo)準(zhǔn),一般分區(qū)的數(shù)量在200左右已經(jīng)算是比較多了。分區(qū)表數(shù)目過多,會有多方面的影響,比如查詢優(yōu)化器生成執(zhí)行計(jì)劃較慢,同時很多維護(hù)工作也會變慢,比如VACUUM等。

    對于多級分區(qū)表來說,分區(qū)文件的數(shù)量可能會增長得非常快。例如,如果一個表被按照月和城市劃分并且有24個月以及100個城市,那么表分區(qū)的總數(shù)就是2400。特別對于列存表,會把每一列存在一個物理表中,因此如果這個表有100個列,系統(tǒng)就需要為該表管理十多萬個文件。因此,在分區(qū)表設(shè)計(jì)之初首先需要考慮未來分區(qū)的總數(shù),進(jìn)而選擇合理的分區(qū)定義。

  • 分區(qū)裁剪

    云原生數(shù)據(jù)倉庫AnalyticDB PostgreSQL版支持分區(qū)表的分區(qū)裁剪功能。詳細(xì)信息,請參見分區(qū)裁剪

分區(qū)表維護(hù)

分區(qū)表支持多種分區(qū)管理操作,包括新增分區(qū),刪除分區(qū),重命名分區(qū),清空分區(qū),交換分區(qū),分裂分區(qū)等,下面舉例說明主要操作。

  • 新增分區(qū)

    如果存在default 分區(qū),則不能新增分區(qū),只能分裂default分區(qū),具體內(nèi)容見下文分裂分區(qū)

    CREATE TABLE sales_p2 PARTITION OF sales FOR VALUES FROM('2017-02-01') TO('2017-02-28');

    當(dāng)分區(qū)表已有至少一個子分區(qū)時,也可以通過 ALTER TABLE ADD PARTITION 語法來新增分區(qū)。

    ALTER TABLE sales ADD partition p2 start ('2017-02-01') end ('2017-02-28');
  • 掛載分區(qū)

    您可以將一張已有的表掛載在表結(jié)構(gòu)相同的分區(qū)表的某個子分區(qū)上。

    ALTER TABLE sales ATTACH PARTITION sales_p2 FOR VALUES FROM('2017-02-01') TO('2017-02-28');
  • 卸載分區(qū)

    卸載分區(qū)只是解除分區(qū)主表與子表的關(guān)系,不會真正刪除分區(qū)子表。

    ALTER TABLE sales DETACH PARTITION sales_p2;
  • 刪除分區(qū)

    刪除分區(qū)會直接刪除分區(qū)子表。

    ALTER TABLE sales DROP PARTITION p2;
  • 重命名分區(qū)

    ALTER TABLE sales RENAME PARTITION p2 TO Feb17;
  • 清空分區(qū)

    ALTER TABLE sales TRUNCATE PARTITION p1;
  • 交換分區(qū)

    ALTER TABLE sales EXCHANGE PARTITION p2 WITH TABLE {cos_table_name} ;
  • 分裂分區(qū)

    -- 將分區(qū)p3 在 '2017-03-20' 左右切分成兩塊
    ALTER TABLE sales SPLIT partition p3 at ('2017-03-20') into (partition p2, partition p3);

    當(dāng)已有default分區(qū)時,只能通過分裂default分區(qū)來新增分區(qū)。

    ALTER TABLE sales SPLIT DEFAULT PARTITION START('2017-03-01') END('2017-03-31') into(partition p3, default partition);