剑道第一仙

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

oracle10g分区表(一)

1. 范围分区 range -最常用

范围分区即根据指定的值范围进行分区,分区键常用日期。

复制代码
--按照哪个列的哪个范围进行分区
create table table_name()
partition by range(分区列)
(
partition 分区1 values less than (值1),
partition 分区2 values less than (值2),
...
partition 分区n values less than (maxvalue)
)
 
说明:
    values less than 指定分区上限,每个分区除第一个分区外会有下限,即前一个分区的上限。
    如上语句所示,分区2的范围为[值1,值2).
    maxvalue 表示不确定的值,这个值高于其他任何分区或分区键的值。
复制代码

2. 列表分区 list

如果某列的值只有几个,可以采用列表分区。如按emp表中的deptno

--按照哪个列的值进行分区
create table table_name()
partition by list (列)
(
partition 分区1 values(列值1),
partition 分区2 values(列值2),
...
)

举例如下:

一、创建分区表

复制代码
create table lj_test_part
(
   birthdate date,
   age number(18,2)
)
PARTITION BY list (birthdate) 
(partition part_t01 values (to_date('2018-01-01', 'yyyy-mm-dd')),
partition part_t02 values (to_date('2018-01-02', 'yyyy-mm-dd')),
partition part_t03 values (to_date('2018-01-03', 'yyyy-mm-dd')),
partition part_t04 values (to_date('2018-01-04', 'yyyy-mm-dd')),
partition part_t05 values (to_date('2018-01-05', 'yyyy-mm-dd')))
;
insert into lj_test_part
select to_date('20180101','yyyymmdd'),10 from dual t 
union all
select to_date('20180102','yyyymmdd'),10 from dual t 
union all
select to_date('20180103','yyyymmdd'),10 from dual t 
union all
select to_date('20180104','yyyymmdd'),10 from dual t 
union all
select to_date('20180105','yyyymmdd'),10 from dual t ;
复制代码

二、查询分区表


select count(*) from lj_test_part partition(part_t02);

三、添加分区

alter table lj_test_part add partition part_t11 values (to_date('2018-01-06', 'yyyy-mm-dd'));

四、删除分区

alter table lj_test_part drop partition part_t01;

 

3. 散列分区 hash

根据字段的hash值进行分区,尽可能使数据均匀分布。具体分区由oracle决定。

create table table_name()
partition by hash(列名)
(
partition 分区名1,
partition 分区名2,
...
)

4. 组合分区

基于两种分区的组合,分区中的分区被称为子分区。

a. 范围-列表分区

复制代码
--范围列表分区
create table 表名()
partition by range(列名1) subpartition by list(列名2)
(
    partition 分区名1 values less than(值)
    (
        subpartition 子分区名 values (列值),
        ...
    ),
    partition 分区名2 values less than(值)
    (
        ....
    )
)
复制代码

b. 范围-散列分区

复制代码
--范围散列分区
create table table_name()
partition by range(列1) subpartition by hash(列2,列3...)
(
    partition 分区名1 values less than (值)
    (
        subpartition 子分区1,
        subpartition 子分区2,
        ...
    ),
    partition 分区名2 values less than (值)
    (
    ......
    )
)
复制代码

三、表分区的查询和维护

关于表分区的操作有:查询、添加、删除、截断、合并、拆分、重命名等。

除查询外,操作的具体语法与DDL语言类似,都以 alter table 开始。

复制代码
--添加分区
alter tableadd parition 分区名 values less than(分界值)
添加的分区界限须高于最后一个分区界限
 
 
--删除分区
alter tabledrop partition 分区名;
如果删除的分区是表中的唯一分区,那么分区不能删除,要想删除,必须先删除表。
 
--截断分区
alter table 表名 truncate partition 分区名;
截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。
但当表中即使只有一个分区时,也可以截断该分区。
 
 
--合并分区
alter table 表名 merge partition 分区名1,分区名2 into partition 分区名2;
合并相邻分区成一个,结果分区将采用较高的分区界限,且不能合并到界限低的分区。
 
--拆分分区
alter table 表名 split partition 分区名 at(值) 
into (partition 分区1, partition 分区2);
将一个分区拆为两个,拆分后原分区不再存在,不能对hash类型的分区进行拆分
 
--重命名表分区
alter table 表名 rename partition 原分区名 to 新分区名;
 
--查询分区
select * from 表名; 全表查询(包括所有分区)
select * from 表名 partition(分区名1);
复制代码

 

 

 

posted on   剑道第一仙  阅读(82)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示