一、临时表
1、特点:
不能备份临时表
oracle不会分析临时表
可以在临时表上创建索引
可以在临时表上创建约束
创建临时表之后不会立即分配段,而是在第一次写数据之后分配
临时表对所有用户共享,但每个用户只能看到自己事务或者会话的数据
可以对临时表进行insert、update、delete操作
锁的数量少
临时表中的数据在会话或者事务结束之后自动删除
2、会话临时表
创建会话临时表需要明确指定on commit preserve rows选项。
create global temporary table (column_name1 data_type ['column_nmame2 data_type ....])
on commit preserve rows;
3、事务临时表
默认为事务临时表,可以不指定on commit delete rows选项
create global temporary table (column_name1 data_type ['column_nmame2 data_type ....])
on commit delete rows;
二、索引组织表(index-organized table 简称IOT)
IOT使用B-tree索引结构存储数据表
访问IOT只需一个i/o,而访问一般被索引的表需要两个i/o(如果使用索引)
表中数据一起存储在索引中,而不只是rowid和索引键值
IOT非常适合用于经常基于主键查询的情况
创建oit:
create table table_name(
column_name1 data_type primary key --必须创建主键约束
[,column_name2 data_type ....]
)
organization index --指明是iot
tablespace tablespace_name
pctthreshold n --指明为表数据预留的空间百分比,溢出部分存放在溢出区;n不能超过50,如果太小,会出现行的链接问题。
including column_name --指明如果溢出,哪个列放之后的数据放入溢出区
overflow tablespace tablespace_name; --指定溢出区所在表空间
三、集群表
两个或者多个表根据相似列、物理地存储在集群中
集群表可以提高表的链接速度,便于查询
创建集群表:
1、创建集群
create cluster cluster_name(cluster_key data_type)
tablespace tablespace_name;
2、散列集群
create cluster cluster_name(cluster_key data_type)
tablespace tablespace_name
hash is cluster_key hashkeys n;
3、创建集群表
create table table_name(
column_name1 data_type --该列与集群键名称相同、数据类型相同、数据长度也相同。
[,column_name2 data_type [,....]]
)
cluster cluster_name(column_name1);
4、删除集群
drop cluster cluster_name;
如果集群已经有表,则用如下方式删除:
drop cluster cluster_name including tables;
四、分区表
1、范围分区
数据均匀分布在不同范围内
create table table_name(
column_name1 data_type
[,.....])
partition by range(column_name1)
(partition par_name1 values less than (value1)[ tablespace tbs_name],
....
);
2、散列分区
数据分布不均匀
create table table_name(]
column_name1 data_type
[, ....]
)
partition by hash(column_name1)
partitions n --n为分区个数
store in (tbs_name1 [,tbs_name2 [, ....]]); --表空间个数量可以小于分区个数
或者:
create table table_name(]
column_name1 data_type
[, ....]
)
partition by hash(column_name1)
(partition par_name1 [tablespace tbs_name1]
[, ....]
);
3、列表分区
数据的值可以枚举
create table table_name(]
column_name1 data_type
[, ....]
)
partition by list(column_name1)
(partition par_name1 values(value1 [, ...]) tablespace tbs_name1
[, ....]
)
4、范围-散列分区
create table table_name(]
column_name1 data_type
[, ....]
)
partition by range(column_name1)
subpartition by hash(column_name2)
subpartitions n --n为子分区个数
(
partition par_name values less than (value1) [ tablespace tbs_name]
[, ....]
)
或者:
create table table_name(]
column_name1 data_type
[, ....]
)
partition by range (column_name1)
subpartition by hash(column_name2)
(
partition par_name1 values less than (value1) [tablespace tbs_name]
subpartition subpar_name1
[, ....]
[, ....]
);
5、范围-列表分区
create table table_name(]
column_name1 data_type
[, ....]
)
partition by range(column_name1)
subpartition by list(column_name2)
(
partition par_name1 values less than(value1) [tablespace tbs_name]
subpartition subpar_name1 values(value1 [, ....])
[, ......]
[, ....]
);
分区的管理待续。