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 table 表 add parition 分区名 values less than(分界值) 添加的分区界限须高于最后一个分区界限 --删除分区 alter table 表 drop 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);
分类:
20数据库 / 16oracle
, 20数据库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义