Oracle 分区表相关语法

oracle: 表分区>>范围分区,列表分区,散列分区/哈希分区,间隔分区,参考分区,子分区/复合分区/组合分区 分区表是将一个逻辑上的大表按照特定的规则划分为多个物理上的子表,这些子表称为分区。分区可以基于不同的维度,如时间、数值范围、字符串值等,将数据分散存储在不同的分区中,以提高数据管理的效率和查询性能,同时便于数据的维护和操作作用范围分区 range它将表中的数据根据某个列的值的范围分布到不同的分区中。通常适用于具有连续数值或时间序列的数据分区名自定义,可以用p1,p2,也可以用其他分区字段必须在表中有定义, 每个分区的区间是前闭后开, 即最小值<=区间< 最大值。 阅读详情

Oracle offers six different ways to partition your table data:

  1. range partition
  2. interval partition
  3. hash partition
  4. list partition
  5. reference partition
  6. system partition

range partition

范围分区是第一个被引入到Oracle中的分区技术。范围分区技术一般用在准备以时间作为分区列的表上。

范围分区一-单一的分区键值

create table TABLE_RANGE1
(
  as_of_date      DATE not null,
  org_unit_id     VARCHAR2(32),
  gl_account_id   VARCHAR2(10),
  iso_currency_cd CHAR(3)
)
partition by range (AS_OF_DATE)
(
  partition P20160720 values less than (TO_DATE(' 2016-07-21 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
  partition P20160721 values less than (TO_DATE(' 2016-07-22 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
);

范围分区二-多分区键值

-- Create table
create table TABLE_RANGE2
(
  order_no       NUMBER,
  year_of_order  INTEGER not null,
  month_of_order INTEGER not null,
  day_of_order   INTEGER not null
)
partition by range (YEAR_OF_ORDER, MONTH_OF_ORDER, DAY_OF_ORDER)
(
  partition PART_Q1 values less than (2016, 4, 1),
  partition PART_Q2 values less than (2016, 7, 1),
  partition PART_Q3 values less than (2016, 10, 1),
  partition PART_Q4 values less than (2017, 1, 1)
);

Caution
It is common in range-partition tables to use a catchall partition as the very last one. The last partition will contain values less than a value called maxvalue, which is simply any value higher than the values in the second-to-last partition.
这段话的意思就是说,不管怎么样,建议在最大的分区上定义一个叫 maxvalue 的分区用于兜底,一旦发生超过最大分区的数据产生,那么可以进行使用 maxvalue 分区进行保存数据。

范围分区三-有maxvalue分区

create table TABLE_RANGE3
(
  as_of_date      DATE not null,
  org_unit_id     VARCHAR2(32),
  gl_account_id   VARCHAR2(10),
  iso_currency_cd CHAR(3)
)
partition by range (AS_OF_DATE)
(
  partition P20160720 values less than (TO_DATE(' 2016-07-21 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
  partition P20160721 values less than (TO_DATE(' 2016-07-22 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
  partition pmax values less than (maxvalue)
);

Note that each partition has a specific name and is stored in a separate tablespace.
需要注意的是每一个分区都有一个名字,保存在独立的空间中。

Interval Partition

Interval partitioning is an extension of the traditional range-partitioning method. In order to implement interval partitioning for a table, you must first specify a minimum of one range partition for that table. Whether you use the minimum singe-range partition or multiple-range partitions, the high value of the range partitioning key is called the transition point. The database automatically creates interval partitions after the data in the table crosses the transition point.

Interval分区技术是传统的范围分区的一种延伸,可以为超过分区键值的数据自动创建对应的分区。但是为了使用Interval分区,那么必须在分区表上至少含有一个以上的分区。

Interval 分区一-根据时间(年)

create table TABLE_INTERVAL1
(
  as_of_date    DATE,
  org_unit_id   VARCHAR2(30),
  gl_account_id VARCHAR2(30)
)
partition by range (AS_OF_DATE)
INTERVAL(NUMTOYMINTERVAL(1, 'YEAR'))
(
  partition P2016 values less than (TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  partition P2017 values less than (TO_DATE(' 2018-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
);

Interval 分区二-根据时间(月)

create table TABLE_INTERVAL2
(
  as_of_date    DATE,
  org_unit_id   VARCHAR2(30),
  gl_account_id VARCHAR2(30)
)
partition by range (AS_OF_DATE)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
  partition P201701 values less than (TO_DATE(' 2017-02-01', 'YYYY-MM-DD')),
  partition P201702 values less than (TO_DATE(' 2018-03-01', 'YYYY-MM-DD'))
);

Interval 分区三-根据时间(天)

create table TABLE_INTERVAL3
(
  as_of_date    DATE,
  org_unit_id   VARCHAR2(30),
  gl_account_id VARCHAR2(30)
)
partition by range (AS_OF_DATE)
INTERVAL(NUMTODSINTERVAL(1, 'DAY'))
(
  partition P20170101 values less than (TO_DATE(' 2017-01-02', 'YYYY-MM-DD')),
  partition P20170102 values less than (TO_DATE(' 2018-01-03', 'YYYY-MM-DD'))
);

Interval 分区四-根据数字

-- Create table
create table TABLE_INTERVAL4
(
  id   INTEGER not null,
  name VARCHAR2(30)
)
partition by range (ID)
INTERVAL(1000)
(
  partition P1 values less than (1000),
  partition P2 values less than (2000)
);

Interval 分区五-指定分区

create table TABLE_INTERVAL5
(
  id   INTEGER not null,
  name VARCHAR2(20)
)
partition by range (ID)
INTERVAL(1000) STORE IN (REPORT_TS, ETL_TS)
(
  partition P1 values less than (1000),
  partition P2 values less than (2000)
);

Range 分区转换为 Interval 分区

ALTER TABLE TABLE_RANGE2 SET INTERVAL(NUMTODSINTERVAL(1, 'DAY'));

Caution
具有maxvalue分区的范围分区无法变成Interval分区。

Interval 分区转换为 Range 分区

ALTER TABLE TABLE_INTERVAL4 SET INTERVAL();

Interval 分区添加指定分区(添加RAYLEE)

ALTER TABLE TABLE_INTERVAL5 SET STORE IN (REPORT_TS, ETL_TS, RAYLEE);

Interval 分区删除指定分区(删除RAYLEE)

ALTER TABLE TABLE_INTERVAL5 SET STORE IN (REPORT_TS, ETL_TS);

如果要删除的表空间上已经存在分区

ALTER TABLE TABLE_NAME MOVE PARTITION PARTITION_NAME TABLESPACE TARGET_TABLESPACE;

Interval 分区注意事项

  • Use the INTERVAL caluse in the CREATE TABLE statement to create an
    interval-partitioned table.
    在建表语句中使用INTERVAL关键字创建Interval 分区

  • Specify at least one range partition using the partition clause,
    before specifying your interval partitions.
    创建Interval 分区最少使用存在一个范围分区

  • The partitioning key must be of the NUMBER or DATE type.
    分区的列必须是 NUMBER 或者 DATE 类型

  • You can optionally specify the tablespaces for the partition data by
    including the STORE IN clause in the CREATE TABLE statement.
    可以选择是否在建表语句中使用 STORE IN 子句用于指定表空间

HASH 分区

Use the hash-partitioning, all you have to do is decide on the number of partitions, and Oracle’s hashing algorithms will assign a hash value to each row’s partitioning key and place it in the appropriate partition.

对于 HASH 分区,你所需要做的就是决定要 hash 成多少个分区,Oracle的 hash 分区算法将会给每一个行的分区列的键值一个hash 值,并把它放置到对应的分区去

HASH 分区代码

CREATE TABLE TABLE_HASH
(   ID INT NOT NULL,
    YEAR_OF_ORDER INT NOT NULL,
    MONTH_OF_ORDER INT NOT NULL,
    DAY_OF_ORDER INT NOT NULL)
PARTITION BY HASH(ID)
PARTITIONS 2
STORE IN (REPORT_TS, ETL_TS);

LIST 分区

对于非连续型的分区的一种补充使用 LIST 分区。

LIST 分区代码-使用默认分区

-- Create table
create table TABLE_LIST1
(
  alpha_id CHAR(1),
  name     VARCHAR2(20)
)
partition by list (ALPHA_ID)
(
  partition P_AG values ('A', 'B', 'C', 'D', 'E', 'F', 'G'),
  partition P_H values ('H', 'I', 'J', 'K', 'L', 'M', 'N')
);

LIST 分区代码-指定分区

create table TABLE_LIST2
(
  alpha_id CHAR(1),
  name     VARCHAR2(20)
)
partition by list (ALPHA_ID)
(
  partition P_AG values ('A', 'B', 'C', 'D', 'E', 'F', 'G') 
  TABLESPACE REPORT_TS,
  partition P_H values ('H', 'I', 'J', 'K', 'L', 'M', 'N') 
  TABLESPACE ETL_TS
);

Reference 分区(未完成)

【计算机组成原理】课程设计四:控制器设计(二) 本文主要是介绍了计算机组成原理课程设计四其二,即控制器设计(二),属于计算机课程设计专栏 阅读详情

相关推荐

《Python Web项目集锦》-专栏介绍和目录

本专栏专注于Python Web项目,涉及内容包含FastAPI、Django、Flask等,所有项目代码完整且可直接运行。不管是零基础还是有经验的开发,相信都能从本专栏获益。有任何问题欢迎私聊博主,专栏持续更新中...

数据知道的博客 5145

Oracle分区表(Partition Table)使用详解

本课程详细介绍了Oracle数据库的分区表机制、分区表应用场景、分区表与分区索引类型/创建/维护操作、分区裁剪等,结合大量的案例程序,对Oracle分区表的使用进行了详细的分析讲解。

ODAC112021Xcopy_x64

解决64位服务器.net连接 oracle报错的问题, oledb连接方式

Oracle 创建分区表操作分区表

1.创建分区表语句 CREATE TABLE TABLE_NAME ( DATA_DATE VARCHAR2(10) NOT NULL, UUID CHAR(32) ) PARTITION BY LIST (DATA_DATE) ( PARTITION P20180131 VALUES ('2018-01-31') TABLESPACE PARTITION_NAME PCTFREE 10 INITRANS 1

weixin_45045098的博客 3938

Oracle 数据字典查询

1,表空间大小查询 当前表空间大小 select tablespace_name, sum(bytes)/1024/1024/1024 GB from dba_data_files group by tablespace_name order by 2 desc 已使用的表空间大小 select tablespace_name, sum(bytes)/1024/1024/10

hellojoy的博客 1497

oracle表分区

在添加主分区时最好新增一个子分区,如果不新增子分区,oracle会自动生成一个默认的子分区;–将worker02和worker03分区中的数据合并到worker03分区中,同时删除worker02分区。当hash分区作为主分区时,oracle中看不到子分区,但是能根据子分区进行查询。3.当列表分区是子分区,hash分区是主分区时;直接添加分区会报错,因为添加的分区要比最大的分区要比最大的分区范围要大。删除主分区,会删除该分区下所有的数据;截断分区是指删除某个分区的中的数据,不会删除分区。

weixin_44672916的博客 9405

Oracle创建分区表(Partition Table

1、分区表类别 1.1、范围分区表; 1.2、列表分区表; 1.3、哈希分区表; 1.4、组合分区表; 1.1 范围分区表 CREATE TABLE range_Partition_Table( range_key_column DATE, NAME VARCHAR2(20), ID integer ) PARTITION BY RANGE(range_key_column) ( PARTITION PART_202007 VALUES L.

HOKING的专栏 1万+

【数据库SQL】分区的新建与删除(Oracle

如果数据库中的一张表在建表的时候通过partitioned by()指定了表中的某字段为分区,那么它就是一张分区表。 向分区表中插入数据时,必须通过partition on()指明要把数据插入到哪个分区中,如果不指明分区则无法插入数据。 新建分区 给一张表新建分区的方法如下。 Oracle数据库上,新建分区的写法是这样的: alter table 表名 add partition 分区名 values (‘分区的值’) 示例: alter table DM_TABLE_M_V add partition P

Donald_Knight的博客 9067

oracle unused 语法_set unused的用法(ORACLE删除字段)

set unused的用法(ORACLE删除字段)一、问题现场有一张大数据量的分区表,数据量在10G以上。因某种原因需要删除其中的某些字段。如果直接用alter table1 drop (column1,column2);或者alter table1 drop column column1;和alter table1 drop column column2;的话,需要执行很长时间,这期间该表被锁,...

weixin_39800112的博客 548

Oracle查询(下)

当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。–优点:分区表的优点–缺点:没有maxvalue时,找不到对应的分区会报错,有maxvalue时,随着时间的变长,该分区的数据会越来越多,失去了分区的意义。–间隔分区 (分区只能使用== 日期类型 或者 数字类型==)–是范围分区的升级版本,或者特殊范围分区。

weixin_58722381的博客 2965

oracle move long,Oracle的Move操作

move一个表到另外一个表空间时,索引不会跟着一起move,而且会失效。(LOB类型例外)表move,我们分为:*普通表move*分区表move*LONG,LOB大字段类型move来进行测试和说明。索引的move,我们通过rebuild来实现一:move普通表、索引基本语法:alter table tab_name move tablespace tbs_name;move过的普通表,在不用到失效...

weixin_29560137的博客 235

Oracle 表分区相关知识

Oracle Partition 分区详细总结 (ORACLE)查看分区表相关信息

afunyusong的专栏 739

oracle拆分分区语法详解大全_Oracle分区表详解

oracle分区表1.表空间及分区表的概念表空间:是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表,所以称作表空间。分区表:当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。Or...

weixin_39731922的博客 1279

Oracle 分区表

一、什么是分区表 Oracle提供了分区技术以支持VLDB(Very Large DataBase)。分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中。分区完全对应用透明。 Oracle分区表可以包括多个分区,每个分区都是一个独立的段(SEGMENT),可以存放到不同的表空间中。查询时可以通过查询表来访问各个分区中的数据,也可以通过在查询时直...

heihei2017的博客 519

oracle把表变为分区表,Oracle 12.2新特性----在线把非分区表转为分区表

Oracle12.2版本之前,如果想把一个非分区表转为分区表常用的有这几种方法:1、建好分区表然后insert into select 把数据插入到分区表中;2、使用在线重定义(DBMS_REDEFINITION)的方法。它们的币是:第一种方法,如果对表有频繁的DML操作,尤其是update操作,就需要停业务来做转换。第二种方法可以在线进行操作,不需要停业务,但操作步骤比较复杂,且可能出错。Or...

weixin_39730587的博客 697

oracle 表分区设置

Oralce 分区记录:大表分区,优化查询

u010738038的专栏 5111

带有clob字段的自动分区表

SQL> select * From v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production P

wll的专栏 5604

oracle建表分区语句,Oracle 分区表的建立

今天学习Oracle分区表技术,现在把建立分区表的语句放在这里,留个纪念!SQL> conn system/windows@study已连接。SQL> create tablespace test datafile 'D:\oracle\product\10.2.0\oradata\study\test.dbf' size 100M autoextend on;表空间已创建。SQL&...

weixin_29310631的博客 3067

MySQL分区表使用保姆级教程

分区表是将大表数据按条件拆分存储在不同磁盘位置的数据库优化技术。它通过将数据分散到多个独立分区中,显著减少查询扫描范围,提升查询性能。文中以年份为例演示了范围分区表的创建过程:先创建普通表展示全表扫描问题,再通过PARTITION BY RANGE按年份划分区间重建分区表分区表能实现并发I/O、独立备份维护等优势,特别适合处理大数据量表。通过查看执行计划和分区统计信息,可验证查询时仅扫描相关分区而非全表,有效优化查询效率。

每天学习一点点 1088

Oracle分区表——范围分区、列表分区、哈希分区、组合分区

Oracle分区表——范围分区、列表分区、哈希分区、组合分区

雷神乐乐的博客 3781

interval间隔分区STORE IN参数的作用范围

11g推出了interval间隔分区,以往的分区是需要手工或半自动化脚本实现分区扩展,但这种间隔分区的出现,将分区扩展的工作彻底解放出来,这里不讨论何为间隔分区,主要说一下创建间隔分区有一个STORE IN参数,官...

congdingfu1756的博客 243
上一篇: R语言读书笔记-02
下一篇: [Oracle] 第17章 集合-记录类型
RayLee-HOBO
博客等级 码龄16年 2粉丝 3原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值