Oracle-创建索引分区

对大数据量索引进行分区同样能够优化应用系统的性能。一般来说,如果索引所对应的表的数据量非常大,比如几百万甚至上千万条数据,则索引也会占用很大的空间,这时,建议对索引进行分区。

  Oracle索引分区分为本地索引分区和全局索引分区两种:全局索引不反映基础表的结构,因此,若要分区就只能进行范围分区;而局部索引反映基础表的结构。

本地索引分区

  本地索引分区就是使用和分区表同样的分区键进行分区的索引,也就是说,索引分区所采用的列与该表的分区所采用的列是相同的,本地索引有以下优点:

如果只有一个分区需要维护,则只有一个本地索引受影响

支持分区独立性

只有本地索引能够支持单一分区的装入和卸载
表分区和各自的本地索引可以同时恢复
本地索引可以单独重复
位图索引仅由本地索引支持

如:创建一个表分区,然后根据这个表分区创建本地索引区
1.首先创建3个表空间,分别存放到3不同磁盘分区中,分别为ts_1,ts_2,ts_3

2.创建一个存储学生成绩的分区表studentgrade,该表共有3个分区,分别位于表空间 ts_1,ts_2,ts_3

create table studentgrade
(
id number primary key,
name varchar2(10),
subject varchar2(10),
grade number
)
partition by range(grade)
(
partition par_nopass values less than(60) tablespace ts_1,
partition par_pass values less than(70) tablespace ts_2,
partition par_good values less than(maxvalue) tablespace ts_3
)
/

3.根据表分区创建本地索引分区,与表分区一样,索引分区也是3个分区(p1,p2,p3)

create index grade_index on studentgrade(grade)
local
(
partition p1 tablespace ts_1,
partition p2 tablespace ts_2,
partition p3 tablespace ts_3
)
/

4.最后,用户可以通过查询dba_ind_partitions视图来查看索引分区信息

select partition_name,tablespace_name from dba_ind_partitions where index_name=‘GRADE_INDEX‘;

全局索引区

  全局索引就是没有与分区表相同分区键的分区索引。当分区中出现许多事物并且要保证所有分区中的数据记录唯一时,采用全局索引分区

无论表是否采用分区,都可以对表采用全局索引分区,此外,不能对Cluster表、位图索引采用全局索引分区


如:以books表的saleprice列为索引列和分区键,创建一个范围分区的全局索引

create index index_saleprcie on books(saleprice)

global  partition by range(saleprice)

(

partition p1 values less than(30),

partition p2 values less than(50),

partition p3 values less than(maxvalue)

);

如:以books表的ISBN列为索引列和分区键,创建一个HASH分区的全局索引

create index index_ISBN on books(ISBN)

global partition by hash(ISBN);

管理索引分区

  在管理索引分区中的各种操作中,常用的操作主要包括删除索引分区和重命名索引分区

1.删除索引分区

在books表的index_saleprice索引中,使用alter index... drop partition语句删除其中的索引分区p2

alter index index_saleprice drop partition p2;

对于全局索引分区,不能删除索引的最高分区,否则系统会提示错误

  在删除若干索引分区之后,如果只剩余一个索引分区,则需要对这个分区进行重建,重建分区可以使用alter index..rebuild partition

如:在books表的index_saleprice索引中,删除其中p2和p1索引分区,然后使用alter index... rebuild partition语句重建索引分区p3

alter index index_saleprice drop  partition p2;

alter index index_saleprice drop  partition p1;

alter index index_saleprice rebuild partition p3;

  重命名索引分区

如:在index_saleprice索引中,使用alter  index... rename partition 重命名索引分区p3

alter index index_saleprice rename partition p3 to p_new;

时间: 2024-11-08 21:10:05

Oracle-创建索引分区的相关文章

Oracle 创建索引的基本规则总结

Oracle 创建索引的基本规则总结 一.B-Tree索引 1.  选择索引字段的原则: 在WHERE子句中最频繁使用的字段 联接语句中的联接字段 选择高选择性的字段(如果很少的字段拥有相同值,即有很多独特值,则选择性很好) Oracle在UNIQUE和主键字段上自动建立索引 在选择性很差的字段上建索引只有在这个字段的值分布非常倾斜的情况下才有益(在这种情况下,某一,两个字段值比其它字段值少出现很多) 不要在很少独特值的字段上建B-TREE索引,在这种情况下,你可以考虑在这些字段上建位图索引.在

oracle 创建索引

适当的使用索引可以提高数据检索速度,可以给经常需要进行查询的字段创建索引. oracle的索引分为5种:唯一索引,组合索引,反向键索引,位图索引,基于函数的索引 创建Oracle索引的标准语法: CREATE INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名; 创建唯一索引: CREATE unique INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名; 创建组合索引: CREATE INDEX 索引名 ON 表名 (列1,列2) TABLESPA

oracle 创建索引思考(转)

在Oracle数据库中,创建索引虽然比较简单.但是要合理的创建索引则比较困难了. 笔者认为,在创建索引时要做到三个适当,即在适当的表上.适当的列上创建适当数量的索引.虽然这可以通过一句话来概括优化的索引的基本准则,但是要做到这 一点的话,需要数据库管理员做出很大的努力.具体的来说,要做到这个三个适当有如下几个要求. 一. 根据表的大小来创建索引. 虽然给表创建索引,可以提高查询的效率.但是数据库管理员需要注意的是,索引也需要一定的开销的.为此并不是说给所有的表都创建索引,那么就 可以提高数据库的

Oracle 创建表分区

create table TableName1( id CHAR(36) not null, samplingdate TIMESTAMP(6) not null, instantaneousflow NUMBER(10,3), totalflow NUMBER(10), flowmeterid CHAR(36) not null, receivetime TIMESTAMP(6), inserttime TIMESTAMP(6));partition by range (SAMPLINGDAT

Oracle 表分区与索引分区

分区技术简介 Oracle是最早支持物理分区的数据库管理系统供应商,表分区的功能是在Oracle 8.0版本推出的.分区功能能够改善应用程序的性能.可管理性和可用性,是数据库管理中一个非常关键的技术.尤其在今天,数据库应用系统的规模越来越大,还有海量数据的数据仓储系统,因此,几乎所有的Oracle数据库都使用分区功能来提高查询的性能,并且简化数据库的日常管理维护工作. 那么使用分区技术有哪些优点呢?具体如下: 减少维护工作量,独立管理每个分区比管理单个大表要轻松得多. 增强数据库的可用性,如果表

物化视图,索引视图,函数索引,创建索引时使用DESC

老板交给的一个任务,搜了一下资料,觉得还是总结一下比较好.假如以后用到了呢?围绕两个主题:一是视图上能够建索引,二是在创建索引时是否可以使用DESC关键字. 一.能否在视图上创建索引 因为普通的视图并没有存储实际的信息,它所操作的数据来自于基本表,所以在普通视图上不可以创建索引. 在oracle中执行如下的语句,会报"视图不适用于此处"的错误 create view test_car as select license from cars; create index index_vew

oracle分区表和分区索引概述

㈠ 分区表技术概述            ⑴ Range 分区            ① 例子                  create table t         (...列定义...)         partition by range (week_num)         (partition p1 values less than (4)tablespace data0,           partition p2 values less than (5)tablespac

深入学习Oracle分区表及分区索引

关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类: •       Range(范围)分区 •       Hash(哈希)分区 •       List(列表)分区 •       以及组合分区:Range-Hash,Range-List. 对于表而言(常规意义上的堆组织表),上述分区形式都可以应用(甚至可以对某个分区指定compress属性),只不过分区依赖列不能是lob,long之类数据类型,每个表的分区

oracle表分区与索引分区

今天是2016年4月13号,清晨据说是50年来深圳最大的雨把我给吵醒了,上午腾讯新闻弹出新闻说这是谣言~!我信了~! 今天把tiptop的一个功能实现了~心情还不错.不瞎扯了,今天开始学习oracle表分区和索引分区!坚持就是胜利~ oracle是支持物理分区的数据库管理系统,据说是最早支持的!优点如下 1:减少维护工作量,独立管理每个分区比管理大的单分区简单 2:数据可用性增强,一个分区坏了不影响所有数据 3:提高查询速度 4:均衡I/O 创建表分区 create table ware_ret

【三思笔记】 全面学习Oracle分区表及分区索引

[三思笔记]全面学习Oracle分区表及分区索引 2008-04-15 关于分区表和分区索引(About PartitionedTables and Indexes) 对于 10gR2 而言,基本上可以分成几类: v  Range(范围)分区 v  Hash(哈希)分区 v  List(列表)分区 v  以及组合分区:Range-Hash,Range-List. 对于表而言(常规意义上的堆组织表),上述分区形式都可以应用(甚至可以对某个分区指定 compress 属性),只不过分区依赖列不能是