ITPub博客

首页 > Linux操作系统 > Linux操作系统 > partition table and index

partition table and index

原创 Linux操作系统 作者:golden_zhou 时间:2011-08-05 16:07:37 0 删除 编辑
建立分區表:(包含四種分區方式:範圍分區,散列分區,列表分區和組合分區)

範圍分區:是指按照列值範圍將表行的數據分佈到不同分區段中.如果表的數據可以按照邏輯範圍進行劃分,并在不同範圍內分佈比較均衡,那麼可以使用範圍分區.一般以時間欄位分區.
語法如下:
create table tablename (id number(3),dt date) partition by range (dt)(
partition p1 values less than ('01-APR-2004')
tablespace user01,
partition p2 values less than ('01-JUL-2004')
tablespace user02,
partition p3 values less than ('01-OCT-2004')
tablespace user03,
partition p4 values less than ('01-JAN-2005')
tablespace user04
);
使用insert語句給範圍分區表插入值時,必須為分區列提供數據.

散列分區:是指找Oracle提供的散列(HASH)函數計算列值數據,并最終按照函數結果分區大表數據.
語法如下:
create table tablename  (id number(6),ss varchar2(30)
)partition by hash(id)(
partition p1 tablespace user01,
partition p2 tablespace user02,
partition p3 tablespace user03,
partition p4 tablespace user04
);

列表分區:用於將離散數據有效地部署到不同分區中.
語法如下:
create table tablename (
deptno number,city varchar2(10)
)partition by list(city)(
partition p1 values('北京','天津') tablespace user01,
partition p2 values('重慶','成都') tablespace user02,
partition p3 values('上海','杭州') tablespace user03,
partition p4 values('廣州','深圳') tablespace user04
);


範圍/散列組合分區:範圍/散列組合分區是範圍分區和散列分區的組合,他首先按照列值範圍進行邏輯的範圍分區,然後在每個範圍分區的基礎上再按照散列分區.對於某些表來說,儘管數據總體是按照特定範圍分佈的,但是每個範圍的數據可能分佈不均.在這種情況下,爲了有效地控制數據分佈,并提高數據範圍性能,可以考慮使用範圍/散列組合分區.
語法如下:
create table tablename(order_id number,order_date date,product_id number
)partition by range(order_date)
subpartition by hash(product_id) subpartitions 4
store in (user01,user02,user03,user04)(
partition p1 values less than('01-APR-2004'),
partition p2 values less than('01-JUL-2004'),
partition p3 values less than('01-OCT-2004'),
partition p4 values less than('01-JAN-2005')
);

範圍/列表組合分區:是範圍分區和列表分區的組合,他首先按照列值範圍進行邏輯意義上的範圍分區,然後再每個範圍分區的基礎上再按照離散值進行列表分區.
語法如下:
create table tablename(deptno mumber,sale_date date,sale_amount number,city varchar2(10)
)
partition by range (sale_date) subpartition by list(city)(
partition r1 values less than ('1-APR-2004')
tablespace user01(
subpartition r1_1 values('北京','上海'),
subpartition r1_2 values('廣州','重慶'),
subpartition r1_3 values('南京','武漢'),
subpartition r1_4 values(default)
),
partition r2 values less than ('1-JUL-2004')
tablespace user02(
subpartition r2_1 values('北京','上海'),
subpartition r2_2 values('廣州','重慶'),
subpartition r2_3 values('南京','武漢'),
subpartition r2_4 values(default)
),
partition r3 values less than ('1-OCT-2004')
tablespace user03(
subpartition r3_1 values('北京','上海'),
subpartition r3_2 values('廣州','重慶'),
subpartition r3_3 values('南京','武漢'),
subpartition r3_4 values(default)
),
partition r4 values less than ('1-JAN-2005')
tablespace user04(
subpartition r4_1 values('北京','上海'),
subpartition r4_2 values('廣州','重慶'),
subpartition r4_3 values('南京','武漢'),
subpartition r4_4 values(default)
)
);



修改分區表:
1.在範圍分區表尾部增加分區
alter table tablename add partition partitionname values less than ('01-04-2005');
如果是在範圍分區表的頂部或者中間增加分區,可以使用split partition選項
alter table tablename split partition p3 at ('01-08-2004')
into (partition p3_1,partition p3_2);

2.為散列分區表增加分區
alter table tablename add partition p6;

3.為列表分區表增加分區
alter table tablename add partition p5 values('拉薩','烏魯木齊');

4.為範圍/散列分區表增加主分區和子分區
alter table tablename add partition p5
with less than('01-04-2005');----增加主分區

alter table tablename modify partition p5 add subpartition;---增加子分區

5.為範圍/列表分區表增加主分區和子分區
alter table tablename add partition r5 values less than ('01-04-2005')(
subpartition r5_1 values ('北京','上海'),
subpartition r5_2 values ('廣州','重慶')
);

alter table tablename modify partition r5
add subpartition r5_3 values('鄭州','廈門');


刪除分區:
刪除範圍分區表,列表分區表或者範圍/列表組合分區表的某分區:
alter table tablename drop partition partitionname;
如果是刪除範圍/列表組合分區表的子分區
alter table tablename drop subpartition partitionname;

刪除散列分區或範圍/散列分區表時
alter table tablename coalesce partition;
刪除範圍/散列子分區:
alter table tablename modify partition partitionname coalesce subpartition;

交換分區數據:
以將分區表數據交換到普通表為例:
alter table sales exchange partition partitionname with table tablename;

截斷分區:
alter table tablename truncate partition partitionname;

修改分區名稱:
alter table tablename rename partition oldpartitionname to newpartitionname;

合併分區:
alter table tablename merge partitions p1,p2 into partition p_half;

重組分區:
alter table tablename move partition partitionname tablespace tablespacename;

為列表分區和子分區增加值:
alter table tablename modify partition partitioname add values ('呼和浩特');
如果是範圍/列表組合分區,可以使用下列語句給子分區添加值.
alter table tablename modify subpartition subpartitionname add values('呼和浩特');

為列表分區或子分區刪除值:
alter table tablename modify partition partitionname drop values ('呼和浩特');
alter table tablename modify subpartition subpartitionname drop values ('呼和浩特');



在分區表上既可以建立全局索引也可以建立分區索引
建立全局索引 使用Global選項,建立分區索引使用local選項.
create index indexname on tablename(columnname) global/local;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25198367/viewspace-704240/,如需转载,请注明出处,否则将追究法律责任。

上一篇: constraint
下一篇: view
请登录后发表评论 登录
全部评论

注册时间:2011-03-09

  • 博文量
    238
  • 访问量
    300845