表可以按range,hash,list分区,表分区后,其上的索引和普通表上的索引有所不同,oracle对于分区表上的索引分为2类,即局部索引和全局索引,下面分别对这2种索引的特点和局限性做个总结。
局部索引local index
1. 局部索引一定是分区索引,分区键等同于表的分区键,分区数等同于表的分区说,一句话,局部索引的分区机制和表的分区机制一样。
2. 如果局部索引的索引列以分区键开头,则称为前缀局部索引。
3. 如果局部索引的列不是以分区键开头,或者不包含分区键列,则称为非前缀索引。
4. 前缀和非前缀索引都可以支持索引分区消除,前提是查询的条件中包含索引分区键。
5. 局部索引只支持分区内的唯一性,无法支持表上的唯一性,因此如果要用局部索引去给表做唯一性约束,则约束中必须要包括分区键列。
6. 局部分区索引是对单个分区的,每个分区索引只指向一个表分区,全局索引则不然,一个分区索引能指向n个表分区,同时,一个表分区,也可能指向n个索引分区,
对分区表中的某个分区做truncate或者move,shrink等,可能会影响到n个全局索引分区,正因为这点,局部分区索引具有更高的可用性。
7. 位图索引只能为局部分区索引。
8. 局部索引多应用于数据仓库环境中。
全局索引global index
1. 全局索引的分区键和分区数和表的分区键和分区数可能都不相同,表和全局索引的分区机制不一样。
2. 全局索引可以分区,也可以是不分区索引,全局索引必须是前缀索引,即全局索引的索引列必须是以索引分区键作为其前几列。
3. 全局分区索引的索引条目可能指向若干个分区,因此,对于全局分区索引,即使只动,截断一个分区中的数据,都需要rebulid若干个分区甚
至是整个索引。
4. 全局索引多应用于oltp系统中。
5. 全局分区索引只按范围或者散列hash分区,hash分区是10g以后才支持。
6. oracle9i以后对分区表做move或者truncate的时可以用update global indexes语句来同步更新全局分区索引,用消耗一定资源来换取高度的可用性。
7. 表用a列作分区,索引用b做局部分区索引,若where条件中用b来查询,那么oracle会扫描所有的表和索引的分区,成本会比分区更高,此时可以考虑用b做全局分区索引
分区索引字典
DBA_PART_INDEXES 分区索引的概要统计信息,可以得知每个表上有哪些分区索引,分区索引的类新(local/global,)
Dba_ind_partitions每个分区索引的分区级统计信息
Dba_indexesminusdba_part_indexes,可以得到每个表上有哪些非分区索引
索引重建
Alter index idx_name rebuild partition index_partition_name [online nologging]
需要对每个分区索引做rebuild,重建的时候可以选择online(不会锁定表),或者nologging建立索引的时候不生成日志,加快速度。
Alter index rebuild idx_name [online nologging]
对非分区索引,只能整个index重建
本文来自CSDN博客,:http://blog.csdn.net/rabbitbug/archive/2009/09/15/4556638.aspx
相关推荐
根据索引是否与表的分区策略相匹配,分区索引可以分为两大类:本地索引(Local Index)和全局索引(Global Index)。 #### 二、本地索引(Local Index) 本地索引是一种特殊的分区索引,它与表的分区紧密相关,即索引的...
分区索引可以是局部索引或全局索引,全局索引可以跨越多个分区,而局部索引则只能作用于一个分区。 创建分区索引 创建分区索引可以使用以下语句: ```sql CREATE INDEX <index_name> ON () GLOBAL PARTITION BY ...
例如,下面创建了一个分区表`employ1`,并为其创建了一个局部索引: ```sql CREATE TABLE employ1 (code NUMBER, name VARCHAR2(10)) PARTITION BY RANGE (code) ( PARTITION p1 VALUES LESS THAN (1000), ...
表可以按range、hash、list分区,表分区后,其上的索引和普通表上的索引有所不同,oracle对于分区表上的索引分为2类,即局部索引和全局索引,下面分别对这2种索引的特点和局限性做个总结。局部索引local index1.局部...
3. **局部索引**:对于每个分区,在`product_id`字段上创建局部索引,这样查询某个月份的产品销售情况时,只需要扫描相关分区的索引即可。 通过这种方式,我们不仅提高了查询效率,还降低了维护成本,因为每次插入...
7. **全局索引和局部索引**:在分区表中,全局索引跨越所有分区,而局部索引只针对特定分区。全局分区索引是索引分布在各个分区,全局非分区索引则独立于分区。 索引管理涉及创建、删除、重建和优化。Oracle提供了...
此外,Oracle还提供了索引合并(index skip scan)、分区索引(partitioning)、全局索引和局部索引等高级特性,以适应更复杂的数据库应用场景。理解并熟练掌握这些索引策略,对于优化数据库性能至关重要。
局部索引通常在查询性能上有优势,而全局索引则适用于跨分区的查询。 总的来说,Oracle 分区和索引是优化大数据查询的关键工具,它们通过有效的数据组织和快速的数据访问路径,提升了系统的整体性能和可维护性。在...
索引的类型多种多样,包括非唯一索引、唯一索引、位图索引以及各种分区索引(如局部有前缀、无前缀、全局有前缀分区索引和散列分区索引)。其中,非唯一索引是最常见的,而位图索引适用于基数较小的列,可以有效地...
Oracle存储索引的数据结构是B*树。位图索引也是如此,仅仅只是是叶子节点不同B*数索引; 索引由根节点、分支节点和叶子节点组成。上级索引块包括下级索引块的索引数据,叶节点包括索引数据和确定行实际位置的rowid。...
#### 一、全局索引与分区表的关系 **全局索引**(Global Index)是指索引覆盖整个表的所有数据,而不受限于分区边界。这种类型的索引通常用于非分区列或者跨分区查询。 **实验验证:** 1. **创建分区表:** ...
全局分区索引覆盖整个表,而局部分区索引仅覆盖其对应的分区,通常局部分区索引在查询只涉及特定分区时能提供更好的性能。 #### 总结 Oracle的表空间、分区表及索引是数据库管理和性能优化的关键组成部分。通过...
对于大表,可以考虑并行创建索引和使用nologging选项以减少重做日志的使用,加快创建速度。 创建最佳索引的方法包括: - 明确定义索引,例如指定表空间、存储参数和是否唯一。 - 使用函数索引,如在包含字符串的列...
分区索引分为全局索引和局部索引。全局索引是对整个分区表创建的索引,索引条目包含了所有分区的数据。而局部索引则是针对每个分区单独创建的,每个分区有自己的索引,这种方式在插入和删除操作时可能会更高效,但...
- 局部有前缀分区索引、局部无前缀分区索引、全局有前缀分区索引:分区表的索引类型。 - 散列分区索引:基于散列函数的索引。 - 基于函数的索引:适用于如转换日期或大小写的列。 4. **管理索引的准则**: - 在...
综上所述,正确管理和使用索引是优化Oracle数据库性能的关键之一。通过合理设计索引结构,不仅可以显著提高查询速度,还可以减少I/O操作,提高系统的整体性能。在实际应用中,应根据具体场景灵活选择合适的索引类型...
在对象管理方面,Oracle支持3种类型的索引,分别是全局分区索引、全局非分区索引和局部分区索引。全局分区索引是在分区表上定义的分区索引,全局非分区索引则是不区分分区的全局索引,局部分区索引只对单个分区有效...
例如,删除全局临时表需要清理所有会话的局部缓冲和存储文件,创建索引时需要考虑已有数据的存在,而表的修改可能涉及所有会话的数据文件重写。此外,事务回滚和 vacuum/analyze操作也需要特殊处理,以保持数据的...