6.3、分区表、分区表索引--Oracle模式对象

分区:

(1).一种分区技术,可以在创建表时应用分区技术,将数据以分区形式保存

(2).可以将巨型表或索引分割成相对较小的、可独立管理的部分。

(3).表分区时必须为表中的每一条记录指定所属分区

对表进行分区优点:

增强可用性;

维护方便;

均衡I/O;

改善查询性能。

创建分区表

分区方法:范围分区、散列分区、列表分区、组合范围散列分区和组合范围列表分区;

1、范围分区:是对数据表中某个值的范围,使用partition by range子句进行分区。

 1 create table testscore(
 2 id      number primary key,
 3 name    varchar2(8),
 4 subject varchar2(10),
 5 score   number
 6 )
 7 --指定按照score列,进行范围分区
 8 partition by range(score)
 9 (
10 --将表分成3个区,分别为range1、range2、range3,并存在不同的三个表空间上
11 partition range1 values less than(60) tablespace AAA,
12 partition range2 values less than(80) tablespace BBB,
13 partition range3 values less than(maxvalue) tablespace CCC
14 );

--向表testscoe中插入数据

1 insert into testscore values (1,‘tyou‘,‘maths‘,50);
2 insert into testscore values (2,‘zhangsa‘,‘maths‘,90);
3 insert into testscore values (3,‘thm‘,‘english‘,76);
4 insert into testscore values (4,‘tya‘,‘maths‘,98);
5 insert into testscore values (5,‘jionjion‘,‘yuwen‘,32);
6 insert into testscore values (6,‘haha‘,‘wuli‘,66);
7 commit;

--查询分区range1的结果如下:

select * from testscore partition(range1);

--查询分区range2的结果如下:

select * from testscore partition(range2);

2、散列分区:通过哈希hash算法均匀分布数据,通过在I/O设备上进行散列分区,可以使得分区的大小一致。使用partition by hash子句。

 1 create table testid(
 2 id      number primary key,
 3 name    varchar2(8),
 4 subject  varchar2(10),
 5 score     number
 6 )
 7 --指定按照id列,进行散列分区
 8 partition by hash(id)
 9 (
10 partition part1 tablespace AAA,
11 partition part2 tablespace BBB,
12 partition part3 tablespace BBB
13 );

3、列表分区:适用于分区列的值为非数字或日期数据类型,并且分区列的取值范围较少时,使用partition by list子句。

--例如,成绩表中的subject科目列取值较少。

 1 create table testsubject(
 2 id      number primary key,
 3 name    varchar2(8),
 4 subject varchar2(10),
 5 score   number
 6 )
 7 --指定按照id列,进行散列分区
 8 partition by list(subject)
 9 (
10 partition part1 values(‘maths‘,‘yuwen‘) tablespace AAA,
11 partition part2 values(‘english‘,‘wuli‘) tablespace BBB,
12 partition part3 values(‘huaxue‘) tablespace CCC
13 );

--向表testsubject中插入数据

1 insert into testsubject values (1,‘tyou‘,‘maths‘,50);
2 insert into testsubject values (2,‘zhangsa‘,‘maths‘,90);
3 insert into testsubject values (3,‘thm‘,‘english‘,76);
4 insert into testsubject values (4,‘tya‘,‘maths‘,98);
5 insert into testsubject values (5,‘jionjion‘,‘yuwen‘,32);
6 insert into testsubject values (6,‘haha‘,‘wuli‘,66);
7 insert into testsubject values (7,‘hehe‘,‘huaxue‘,66);
8 commit;

--查询分区part1的结果如下:

select * from testsubject partition(part1);

--查询分区part2的结果如下:

select * from testsubject partition(part2);

--查询分区part3的结果如下:

select * from testsubject partition(part3);

4、组合范围散列分区:结合范围分区和散列分区

 1 create table testRanHas(
 2 id      number primary key,
 3 name    varchar2(8),
 4 subject varchar2(10),
 5 score   number
 6 )
 7 --指定按照score列范围分区分成3个分区
 8 partition by range(score)
 9 --然后,再使用subpartition by子句进行散列分区
10 subpartition by hash(id)
11 subpartitions 2 store in (AAA,BBB)
12 (
13 partition range1 values less than(60),
14 partition range2 values less than(80),
15 partition range3 values less than(maxvalue)
16 );

5、组合范围列表分区:结合范围分区和列表分区

 1 create table testRanLis(
 2 id      number primary key,
 3 name    varchar2(8),
 4 subject varchar2(10),
 5 score   number
 6 )
 7 partition by range(score)
 8 subpartition by list(subject)
 9 (
10 partition range1 values less than(60)
11      (
12       subpartition part1_1 values(‘maths‘,‘yuwen‘) tablespace AAA,
13       subpartition part1_2 values(‘english‘,‘wuli‘) tablespace BBB
14       ),
15 partition range2 values less than(80)
16       (
17       subpartition part2_1 values(‘maths‘,‘yuwen‘) tablespace AAA,
18       subpartition part2_2 values(‘huaxue‘) tablespace CCC
19       ),
20 partition range3 values less than(maxvalue)
21       (
22        subpartition part3_1 values(‘maths‘,‘yuwen‘) tablespace AAA,
23        subpartition part3_2 values(‘english‘,‘wuli‘) tablespace BBB,
24        subpartition part3_3 values(‘huaxue‘) tablespace CCC
25        )
26 );

分区表索引:3种类型,局部分区索引、全局分区索引和全局非分区索引

局部分区索引:

为分区表的各个分区单独建立的索引,各个分区索引之间相互独立的。

--先创建一个范围分区表

 1 create table testscore(
 2 id      number primary key,
 3 name    varchar2(8),
 4 subject varchar2(10),
 5 score   number
 6 )
 7 partition by range(score)
 8 (
 9 partition range1 values less than(60) tablespace AAA,
10 partition range2 values less than(80) tablespace BBB,
11 partition range3 values less than(maxvalue) tablespace CCC
12 );

--再创建局部分区索引

1 create index index_testscore
2 on testscore(name) local
3 (
4 partition index1 tablespace AAA,
5 partition index2 tablespace BBB,
6 partition index3 tablespace CCC
7 );

全局分区索引:

对整个分区表建立的索引,全局分区索引的各个分区之间不是相互对立的。

1 create index global_index_testscore
2 on testscore(score)
3 Global partition by range(score)
4 (
5 partition range1 values less than(60) tablespace AAA,
6 partition range2 values less than(80) tablespace BBB,
7 partition range3 values less than(maxvalue) tablespace CCC
8 );

注意:使用global建立全局分区索引,只能用于range分区!!!

全局非分区索引:

对整个分区表建立索引,但未对索引进行分区。

create
index nopart_index_testscore

on
testscore(subject);

分区表管理:

1、增加分区

为范围分区表增加分区:

--先创建一个test范围分区表

create table test(
id      number primary key,
name    varchar2(8),
subject varchar2(10),
score   number
)
partition by range(score)
(
partition range1 values less than(60) tablespace AAA,
partition range2 values less than(80) tablespace BBB,
partition range3 values less than(100) tablespace CCC
);

--在最后一个分区之后增加分区

alter table test
add partition range4 values less than(150)

--在分区中间或开始出增加分区

--在80-100之间,增加一个90分开成两个分区,即range3分成range5和range6

1 alter table test
2 split partition range3 at(90)
3 into(
4      partition range5 tablespace AAA,
5      partition range6 tablespace BBB
6      );

为散列分区表增加分区:

alter table test2

add partition range4 tablespace AAA;

为列表分区表增加分区:

alter table test3

add partition range4 values(‘shengwu‘) tablespace AAA;

2、合并分区:

--将之前增加的分区合并

alter table test

merge partitions range5,range6 into partition range3;

3、删除分区:

alter table test

drop partition range4;

时间: 2024-12-13 01:56:31

6.3、分区表、分区表索引--Oracle模式对象的相关文章

6.1、索引--Oracle模式对象

1.创建索引: (1).单列索引 Create index name_index on 门诊费用记录(id) (2).复合索引 同一张表可以有多个索引,但是要求列的组合必须不同, --例如: Create index emp_id on emp(ename,job); Create index emp_id on emp(job,ename); 搜索是按照从后往前的顺序查找到,所以建立索引时,应按照列的区分度 2.创建原则: (1).在大表上创建索引才有意义: (2).在where子句或是连接条

6.4、视图、序列、同义词--Oracle模式对象

视图view 是一个虚拟表,不存储数据值. Create or replace view 病人基本信息 as select 病人id,住院号,姓名,性别,年龄 from 病人信息表; 在创建视图时,只是将视图的定义存入到数据库字典中,并没有执行select查询,只有当用户对视图查询时,系统才按照视图的定义从基本表中获取数据. 视图上可进行insert.update和delete操作.一个视图中,可以同时包含可更新的字段和不可更新的字段.例如: Create or replace view 病人基

6.2、临时表--Oracle模式对象

临时表的特点: (1).只有在用户向表中添加数据时,Oracle才会为其分配存储空间. (2).为临时表分配空间来自临时表空间,避免与永久对象的数据争取存储空间: (3).临时表占用的存储空间,随着事务结束或会话终止而被释放,数据也丢失: (4).和堆表一样,可以在临时表上创建索引.视图和触发器等. 事务级别临时表: --创建事务临时表user_trans create global temporary table user_trans( id number, uname varchar2(10

Oracle Database Concepts:介绍模式对象(Introduction to Schema Objects)

数据库模式(schema)是数据结构的逻辑容器,被称作模式对象(schema objects) 每一个数据库用户拥有一个和用户名相同的模式,例如hr用户拥有hr模式. 在一个产品数据库中,模式的拥有者通常是数据库应用程序而不是一个人. 在一个模式中,每一个模式对象都有一个唯一的名字.如hr.employees代表hr模式下的employees表. 如下图所示: 模式对象的类型 最重要的模式对象是关系型数据库中的表(table), Oracle SQL使你能创建和操作其他类型的模式对象.如下: 1

Oracle数据库对象,同义词、序列、视图、索引

数据库对象简介 Oracle 数据库对象又称模式对象 数据库对象是逻辑结构的集合,最基本的数据库对象是表 其他数据库对象包括: 同义词是现有对象的一个别名. 简化SQL语句 隐藏对象的名称和所有者 提供对对象的公共访问 同义词共有两种类型: CREATE USER test IDENTIFIED BY test; GRANT CONNECT , CREATE SYNONYM TO test; GRANT SELECT ON SCOTT.EMP TO test; GRANT DELETE ON S

分区表的索引

分区表的索引分为:分区对齐索引(Aligned Index)和非对齐索引.对齐索引是指索引结构的分区和基础表的分区相同,这意味着,在表的一个分区上创建的索引,索引结构也在同一个分区中.索引结构在每个分区中都是独立存储和维护的,如果索引结构和表结构在同一个分区(也就是在同一个文件组上),那么索引是与基础表对齐的索引.创建对齐索引,并不意味着必须使用相同名称的分区scheme,只要分区schem使用的分区边界和每个分区存储的文件组相同,这两个分区schem是等价的,使用等价的分区scheme创建的索

ORACLE各种对象、概念及关系整理(一文读懂)

下面是我整理(抄袭)的一些Oracle数据库相关概念对象的理解,如有疏漏,欢迎指正.至于整理这篇文章的目的:主要是网上的内容太散了,这样整理一遍可以加深理解,也便于后续查阅.就我的理解:下述内容应该可对10g,11g,12c都适用.更新的版本没用过. Oracle DataBase是一款关系型数据库管理系统,很多时候,我们会把那个承载我们核心数据的系统笼统地成为数据库服务器,但从严格意义上来讲Oracle DataBase是由两个部分组成: 其中: 数据库指的是用户存储数据的一些物理文件,数据库

Oracle数据库对象

Oracle数据库对象又称模式对象,它是逻辑结构的集合,其中最基本的数据库对象是表.常见的数据库对象包括同义词.序列.视图等. 1.视图 视图可以限制表中一组行为访问.隐藏了数据的复杂性.简化了用户的sql.基表定义修改隔离.通过重命名列从另一个角度提供了数据. 2.触发器(Trigger) 如果想对视图进行增删改,就可以使用触发器. 3.数据字典 oracle中分为了静态数据字典和动态数据字典. 静态数据字典: dba_*** :查看所有的用户表 all_*** :查看该用户下能看到的所有表

oracle系统对象

select * from all_tab_comments-- 查询所有用户的表,视图等 select * from user_tab_comments  -- 查询本用户的表,视图等 select * from all_col_comments--查询所有用户的表的列名和注释. select * from user_col_comments-- 查询本用户的表的列名和注释 select * from all_tab_columns--查询所有用户的表的列名等信息(详细但是没有备注). sel