多列分区
2013-10-17 06:34
471 查看
范围分区 range(A,B)的分区法则,范围分区都是 values less than(A,B)的,通常情况下以A为准,如果小于A的不用考虑B,直接插进去,如果等于A那么考虑B,要是满足B的话也插进去。
(一)创建分区表
create table tmp_11
(
COMPANY_ID NUMBER(8) not null,
SO_NO CHAR(12) not null,
N_YEAR number(4),
N_MONTH number(2),
N_DAY number(2)
)
partition by range(N_YEAR,N_MONTH,N_DAY)
(
partition p1 values less than (2011,1,1),
partition p2 values less than (2012,1,1),
partition p3 values less than (2013,1,1),
partition p4 values less than (2014,1,1)
)
(2)创建主键索引
SQL> alter table tmp_11 add constraint PK_TMP_11 primary key (COMPANY_ID,SO_NO) using index local tablespace dms_index;
alter table tmp_11 add constraint PK_TMP_11 primary key (COMPANY_ID,SO_NO) using index local tablespace dms_index
ORA-14039: partitioning columns must form a subset of key columns of a UNIQUE index
alter table tmp_11
add constraint PK_TMP_11 primary key (COMPANY_ID,SO_NO)
注:创建本地索引的条件,在主键和唯一约束中,分区列必须在主键中。
SQL> alter table tmp_11 add constraint PK_TMP_11 primary key (COMPANY_ID,SO_NO) ;
Table altered
(3)插入数据,查看执行计划
select * from tmp_11 where n_year=2009
select * from tmp_11 where n_month=9
select * from tmp_11 where n_day=9
select * from tmp_11 where n_year=2009 and n_day=9
分区执行计划
Oracle分区执行计划
range分区可用的操作: www.2cto.com
分区表,按 n1 ,n2 分区
partition range single:访问单个分区
partition range iterator:访问多个分区
partition range inlist: 分区键中用了in 例如: where n1 in(X1,X2) and n2=X3
partition range all: 所有的分区
partition range empty: 条件在分区中不存在 (或者说是找不到数据)
partition range or: 分区键中用了or 例如 where n1=X1 or n2=X2
partition range subquery:
partition range join-filter:
partition range multi-column:
hash分区可用的操作:
partition hash single:
partition hash iterator:
partition hash inlist
partition hash all
partition hash subquery
partition hash join-filter
比range少了partition range or和partition range multi-column
list分区可用的操作:
partition list single
partition list iterator
partition list inlist
partition list all
partition list empty
partition list or
partition list subquery
partition list join-filter
PARTITION RANGE (MULTI-COLUMN)
访问以组合字段为分区键的范围分区(RANGE PARTITION)表中所有与多个分区字段过滤条件相匹配的分区。多列范围分区一般使用于一些特定的条件中
(一)创建分区表
create table tmp_11
(
COMPANY_ID NUMBER(8) not null,
SO_NO CHAR(12) not null,
N_YEAR number(4),
N_MONTH number(2),
N_DAY number(2)
)
partition by range(N_YEAR,N_MONTH,N_DAY)
(
partition p1 values less than (2011,1,1),
partition p2 values less than (2012,1,1),
partition p3 values less than (2013,1,1),
partition p4 values less than (2014,1,1)
)
(2)创建主键索引
SQL> alter table tmp_11 add constraint PK_TMP_11 primary key (COMPANY_ID,SO_NO) using index local tablespace dms_index;
alter table tmp_11 add constraint PK_TMP_11 primary key (COMPANY_ID,SO_NO) using index local tablespace dms_index
ORA-14039: partitioning columns must form a subset of key columns of a UNIQUE index
alter table tmp_11
add constraint PK_TMP_11 primary key (COMPANY_ID,SO_NO)
注:创建本地索引的条件,在主键和唯一约束中,分区列必须在主键中。
SQL> alter table tmp_11 add constraint PK_TMP_11 primary key (COMPANY_ID,SO_NO) ;
Table altered
(3)插入数据,查看执行计划
select * from tmp_11 where n_year=2009
select * from tmp_11 where n_month=9
select * from tmp_11 where n_day=9
select * from tmp_11 where n_year=2009 and n_day=9
分区执行计划
Oracle分区执行计划
range分区可用的操作: www.2cto.com
分区表,按 n1 ,n2 分区
partition range single:访问单个分区
partition range iterator:访问多个分区
partition range inlist: 分区键中用了in 例如: where n1 in(X1,X2) and n2=X3
partition range all: 所有的分区
partition range empty: 条件在分区中不存在 (或者说是找不到数据)
partition range or: 分区键中用了or 例如 where n1=X1 or n2=X2
partition range subquery:
partition range join-filter:
partition range multi-column:
hash分区可用的操作:
partition hash single:
partition hash iterator:
partition hash inlist
partition hash all
partition hash subquery
partition hash join-filter
比range少了partition range or和partition range multi-column
list分区可用的操作:
partition list single
partition list iterator
partition list inlist
partition list all
partition list empty
partition list or
partition list subquery
partition list join-filter
PARTITION RANGE (MULTI-COLUMN)
访问以组合字段为分区键的范围分区(RANGE PARTITION)表中所有与多个分区字段过滤条件相匹配的分区。多列范围分区一般使用于一些特定的条件中
相关文章推荐
- g77 arm 编译器
- ORA-01791:不是 SELECTed 表达式
- PHP 中变量的间接引用
- Android基站定位
- JavaScript<四>_DOM
- 线程并发库<二>_线程池
- Combination Sum
- struts2的工作流程(易懂版)
- 白首方恨读书迟
- 解决EF一对一或多对一的删除
- java 关于操作oracle的clob类型
- 有关 C 指针的个人另类概念(1)
- Java is Pass-by-Value, Dammit!
- linux服务器安全加固shell脚本
- nodejs广播
- Best Time to Buy and Sell Stock
- 函数1(四)
- nodejs服务
- 【学习】linux shell 编程
- RHEL6.4更改为CentOS6.4的yum源