`
wsql
  • 浏览: 11802232 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

分区索引--本地索引和全局索引比较

 
阅读更多

本文基于oracle10gR2

分区索引分为本地(local index)索引和全局索引(global index)。

其中本地索引又可以分为有前缀(prefix)的索引和无前缀(nonprefix)的索引。而全局索引目前只支持有前缀的索引。B树索引和位图索引都可以分区,但是HASH索引不可以被分区。位图索引必须是本地索引。下面就介绍本地索引以及全局索引各自的特点来说明区别;

一、本地索引特点:

1.    本地索引一定是分区索引,分区键等同于表的分区键,分区数等同于表的分区说,一句话,本地索引的分区机制和表的分区机制一样。
2.    如果本地索引的索引列以分区键开头,则称为前缀局部索引。
3.    如果本地索引的列不是以分区键开头,或者不包含分区键列,则称为非前缀索引。
4.    前缀和非前缀索引都可以支持索引分区消除,前提是查询的条件中包含索引分区键。
5.    本地索引只支持分区内的唯一性,无法支持表上的唯一性,因此如果要用本地索引去给表做唯一性约束,则约束中必须要包括分区键列。
6.    本地分区索引是对单个分区的,每个分区索引只指向一个表分区,全局索引则不然,一个分区索引能指向n个表分区,同时,一个表分区,也可能指向n个索引分区,对分区表中的某个分区做truncate或者move,shrink等,可能会影响到n个全局索引分区,正因为这点,本地分区索引具有更高的可用性。
7.    位图索引只能为本地分区索引。
8.    本地索引多应用于数据仓库环境中。
本地索引:创建了一个分区表后,如果需要在表上面创建索引,并且索引的分区机制和表的分区机制一样,那么这样的索引就叫做本地分区索引。本地索引是由ORACLE自动管理的,它分为有前缀的本地索引和无前缀的本地索引。什么叫有前缀的本地索引?有前缀的本地索引就是包含了分区键,并且将其作为引导列的索引。什么叫无前缀的本地索引?无前缀的本地索引就是没有将分区键的前导列作为索引的前导列的索引。下面举例说明:

create table test (id number,data varchar2(100))
partition by RANGE (id)
(
partition p1 values less than (1000) tablespace p1,
partition p2 values less than (2000) tablespace p2,
partition p3 values less than (maxvalue) tablespace p3
);

create index i_id on test(id) local; 因为id是分区键,所以这样就创建了一个有前缀的本地索引。

SQL> select dbms_metadata.get_ddl('INDEX','I_ID','ROBINSON') index_name FROM DUAL;------去掉了一些无用信息

INDEX_NAME

--------------------------------------------------------------------------------

CREATE INDEX "ROBINSON"."I_ID" ON "ROBINSON"."TEST" ("ID") LOCAL

(PARTITION "P1" TABLESPACE "P1" ,PARTITION "P2" TABLESPACE "P2" ,PARTITION "P3" TABLESPACE "P3" );

也可以这样创建:

SQL> drop index i_id;

Index dropped

SQL> CREATE INDEX "ROBINSON"."I_ID" ON "ROBINSON"."TEST" ("ID") LOCAL
2 (PARTITION "P1" TABLESPACE "P1" , PARTITION "P2" TABLESPACE "P2" ,PARTITION "P3" TABLESPACE "P3" );

Index created

create index i_data on test(data) local;因为data不是分区键,所以这样就创建了一个无前缀的本地索引。

SQL> select dbms_metadata.get_ddl('INDEX','I_DATA','ROBINSON')index_name FROM DUAL;---删除了一些无用信息

INDEX_NAME
--------------------------------------------------------------------------------

CREATE INDEX "ROBINSON"."I_DATA" ON "ROBINSON"."TEST" ("DATA")LOCAL
(PARTITION "P1" TABLESPACE "P1" ,PARTITION "P2" TABLESPACE "P2" ,PARTITION "P3" TABLESPACE "P3" );

从user_part_indexes视图也可以证明刚才创建的索引,一个是有前缀的,一个是无前缀的

SQL> select index_name,table_name,partitioning_type,locality,ALIGNMENT from user_part_indexes;

INDEX_NAME TABLE_NAME PARTITIONING_TYPE LOCALITY ALIGNMENT
------------------------------ ------------------------------ ----------------- -------- ------------
I_DATA TEST RANGE LOCALNON_PREFIXED
I_ID TEST RANGE LOCALPREFIXED

二、全局索引特点:

1.全局索引的分区键和分区数和表的分区键和分区数可能都不相同,表和全局索引的分区机制不一样。

2.全局索引可以分区,也可以是不分区索引,全局索引必须是前缀索引,即全局索引的索引列必须是以索引分区键作为其前几列。

3.全局分区索引的索引条目可能指向若干个分区,因此,对于全局分区索引,即使只截断一个分区中的数据,都需要rebulid若干个分区甚至是整个索引。

4.全局索引多应用于oltp系统中。

5.全局分区索引只按范围或者散列hash分区,hash分区是10g以后才支持。

6.oracle9i以后对分区表做move或者truncate的时可以用update global indexes语句来同步更新全局分区索引,用消耗一定资源来换取高度的可用性。

7.表用a列作分区,索引用b做局部分区索引,若where条件中用b来查询,那么oracle会扫描所有的表和索引的分区,成本会比分区更高,此时可以考虑用b做全局分区索引。

全局索引:与本地分区索引不同的是,全局分区索引的分区机制与表的分区机制不一样。全局分区索引全局分区索引只能是B树索引,到目前为止(10gR2),oracle只支持有前缀的全局索引。另外oracle不会自动的维护全局分区索引,当我们在对表的分区做修改之后,如果执行修改的语句不加上update global indexes的话,那么索引将不可用。以上面创建的分区表test为例,讲解全局分区索引:

SQL> drop index i_id ;

Index dropped

SQL> create index i_id_global on test(id) global
2 partition by range(id)
3 ( partition p1 values less than (2000) tablespace p1,
4 partition p2 values less than (maxvalue) tablespace p2
5 );

Index created

SQL> alter table test drop partition p3;

Table altered

ORACLE默认不会自动维护全局分区索引,注意看status列,

SQL> select INDEX_NAME,PARTITION_NAME,STATUS from user_ind_partitions where index_name='I_ID_GLOBAL';

INDEX_NAME PARTITION_NAME STATUS
------------------------------ ------------------------------ --------
I_ID_GLOBAL P1 USABLE
I_ID_GLOBAL P2 USABLE

SQL> create index i_id_global on test(data) global
2 partition by range(id)
3 ( partition p1 values less than (2000) tablespace p1,
4 partition p2 values less than (maxvalue) tablespace p2
5 );

create index i_id_global on test(data) global
partition by range(id)
( partition p1 values less than (2000) tablespace p1,
partition p2 values less than (maxvalue) tablespace p2
)

ORA-14038: GLOBAL 分区索引必须加上前缀

SQL> create bitmap index i_id_global on test(id) global
2 partition by range(id)
3 ( partition p1 values less than (2000) tablespace p1,
4 partition p2 values less than (maxvalue) tablespace p2
5 );

create bitmap index i_id_global on test(id) global
partition by range(id)
( partition p1 values less than (2000) tablespace p1,
partition p2 values less than (maxvalue) tablespace p2
)

ORA-25113: GLOBAL 可能无法与位图索引一起使用


三、分区索引不能够将其作为整体重建,必须对每个分区重建

SQL> alter index i_id_global rebuild online nologging;

alter index i_id_global rebuild online nologging

ORA-14086: 不能将分区索引作为整体重建

这个时候可以查询dba_ind_partitions,或者user_ind_partitions,找到partition_name,然后对每个分区重建

SQL> select index_name,partition_name from user_ind_partitions where index_name='I_ID_GLOBAL';

INDEX_NAME PARTITION_NAME
------------------------------ ------------------------------
I_ID_GLOBAL P1
I_ID_GLOBAL P2

SQL> alter index i_id_global rebuild partition p1 online nologging;

Index altered

SQL> alter index i_id_global rebuild partition p2 online nologging;

Index altered

四、关于分区索引的几个视图

dba_ind_partitions 描述了每个分区索引的分区情况,以及统计信息
dba_part_indexes 分区索引的概要统计信息,可以得知每个表上有哪些分区索引,分区索引的类型(local/global)
dba_indexes minus dba_part_indexes (minus操作)可以得到每个表上有哪些非分区索引





分享到:
评论

相关推荐

    分区索引,本地索引,全局索引的区别

    oracle 分区索引,本地索引,全局索引的区别

    Oracle 分区索引介绍和实例演示

    分区索引(或索引分区)主要是针对分区表而言的。随着数据量的不断增长,普通的堆表...b、分区索引可以分为本地分区索引以及全局分区索引 本地分区索引:  本地分区索引信息的存放依赖于父表分区。也就是说对于本地索

    Oracle自学(学习)材料 (共18章 偏理论一点)

    12 管理索引 目标 12-2 索引的分类 12-3 B 树索引 12-4 位图索引 12-6 B 树索引和位图索引的比较 12-7 创建普通 B 树索引 12-8 创建索引:指导 12-10 创建位图索引 12-11 修改索引的储存参数 12-12 分配和回收索引...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    10.10 压缩表、索引和分区 10.10.1 使用行和页压缩 10.10.2 设置或改变压缩设置 第11章 数据的导入和导出及转换 11.1 使用集成服务 11.1.1 集成服务简介 11.1.2 集成服务工具 11.1.3 集成服务和数据提供程序 11.1.4...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    3.4.3 字典管理和本地管理的表空间 91 3.5 临时文件 93 3.6 控制文件 95 3.7 重做日志文件 95 3.7.1 在线重做日志 96 3.7.2 归档重做日志 98 3.8 密码文件 100 3.9 修改跟踪文件 103 3.10 闪回日志文件 104 ...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    10.10 压缩表、索引和分区 10.10.1 使用行和页压缩 10.10.2 设置或改变压缩设置 第11章 数据的导入和导出及转换 11.1 使用集成服务 11.1.1 集成服务简介 11.1.2 集成服务工具 11.1.3 集成服务和数据提供程序 11.1.4...

    SQL.Server.2008管理员必备指南.part1.rar(1/4)

     操作架构、表、索引和视图  进行自动化维护和实现基于策略的管理  监视服务器活动并优化性能  管理日志传送和数据库镜像  执行备份和还原  《微软技术丛书》包括以下几个子系列  从入门到精通  适舍新手...

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    10.10 压缩表、索引和分区 10.10.1 使用行和页压缩 10.10.2 设置或改变压缩设置 第11章 数据的导入和导出及转换 11.1 使用集成服务 11.1.1 集成服务简介 11.1.2 集成服务工具 11.1.3 集成服务和数据提供程序 11.1.4...

    oracle学习经典教程

    全局分区索引.40 1.2.2.8 位图连接索引.........40 1.3 分区表总结.............41 1.3.1. 分区表理论知识........................41 1.3.2 普通表转分区表方法..................45 1.3.2.1 插入: ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    mssql 微软 只能能运行在windows平台,体积比较庞大,占用许多系统资源, 但使用很方便,支持命令和图形化管理,收费。 中型企业 Mysql 甲骨文 是个开源的数据库server,可运行在多种平台, 特点是响应速度特别快,...

    SQL.Server.2008管理员必备指南.part2.rar(2/4)

     操作架构、表、索引和视图  进行自动化维护和实现基于策略的管理  监视服务器活动并优化性能  管理日志传送和数据库镜像  执行备份和还原  《微软技术丛书》包括以下几个子系列  从入门到精通  适舍新手...

    SQL.Server.2008管理员必备指南.part3.rar(3/4)

     操作架构、表、索引和视图  进行自动化维护和实现基于策略的管理  监视服务器活动并优化性能  管理日志传送和数据库镜像  执行备份和还原  《微软技术丛书》包括以下几个子系列  从入门到精通  适舍新手...

    SQL.Server.2008管理员必备指南.part4.rar(4/4)

     操作架构、表、索引和视图  进行自动化维护和实现基于策略的管理  监视服务器活动并优化性能  管理日志传送和数据库镜像  执行备份和还原  《微软技术丛书》包括以下几个子系列  从入门到精通  适舍新手...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    12.3.2 全局索引 345 12.3.3 散列分区与范围分区 346 12.4 与应用特点相匹配的解决方案 348 12.4.1 压缩索引 348 12.4.2 基于函数的索引 350 12.4.3 反转键索引 353 12.4.4 降序索引 354 12.5 管理问题的...

    入门学习Linux常用必会60个命令实例详解doc/txt

    这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。 ◆ 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last; ◆ 文件处理命令...

    Oracle数据库管理员技术指南

    3.4.1 子分区的导出和导入 3.4.2 导出/导入多个转储文件 3.4.3 为卸载表的导出过程的选择语句 指定一个查询 3.4.4 导出/导入预计算优化程序统计 数据 3.4.5 可移动表空间 3.5 回顾 第4章 设计高可用性数据库...

    网管教程 从入门到精通软件篇.txt

    GID:Windows 95全局索引文件(包括帮助状态) GIF:CompuServe位图文件 GL:动画格式 GRP:程序管理组 H HEX:Macintosh BinHex2.0文件 HLP:帮助文件;Date CAD Windows帮助文件 HPP:C++程序头文件 HQX:...

    数据库基础

    §5.2.4 维护表分区和索引分区 167 §5.3 簇与分区有关的数据字典 169 §5.3.1 分区、簇数据字典列表 169 §5.3.2 基本的分区、簇信息查询 169 第六章 使用SQL 进行数据操作 170 §6.1 INSERT操作 170 §6.1.1 用...

Global site tag (gtag.js) - Google Analytics