分区表、分区索引和全局索引:
在一个表的数据超过过2000万条或占用2G空间时,建议建立分区表。
create table ta(c1 int,c2 varchar2(16),c3 varchar2(64),c4 int constraint pk_ta primary key (c1)) partition by range(c1)(partition p1 values less than (10000000),partition p2 values less than (20000000),partition p3 values less than (30000000),partition p4 values less than (maxvalue)); |
分区索引和全局索引:
分区索引就是在所有每个区上单独创建索引,它能自动维护,在drop或truncate某个分区时不影响该索引的其他分区索引的使用,也就是索引不会失效,维护起来比较方便,但是在查询性能稍微有点影响。
create index idx_ta_c2 on ta(c2) local (partition p1,partition p2,partition p3,partition p4); 或者 create index idx_ta_c2 on ta(c2) local ; |
另外在create unique index idx_ta_c2 on ta(c2) local ;系统会报ORA-14039错误,这是因为ta表的分区列是c1,oracle不支持在分区表上创建PK主键时主键列不包含分区列,创建另外的约束(unique)也不可以。
全局索引就是在全表上创建索引,它可以创建自己的分区,可以和分区表的分区不一样,也就是它是独立的索引。在drop或truncate某个分区时需要创建索引alter index idx_xx rebuild,也可以alter table table_name drop partition partition_name update global indexes;实现,但是要花很长时间在重建索引上。可以通过查询user_indexes、user_part_indexes和user_ind_partitions视图来查看索引是否有效。
create index idx_ta_c3 on ta(c3); |
或者把全局索引分成多个区(注意和分区表的分区不一样):
create index idx_ta_c4 on ta(c4) global partition by range(c4)(partition ip1 values less than(10000),partition ip2 values less than(20000),partition ip3 values less than(maxvalue)); |
注意索引上的引导列要和range后列一致,否则会有ORA-14038错误。
oracle会对主键自动创建全局索引
如果想在主键的列上创建分区索引,除非主键包括分区键,还有就是主键建在两个或以上列上。
在频繁删除表的分区且数据更新比较频繁时为了维护方便避免使用全局索引。
----------------------------------------------------------------------
局部索引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做全局分区索引
相关推荐
- **分区机制**:全局索引的分区机制与表的分区机制不相同,这意味着一个全局索引分区可能指向多个表分区,反之亦然。 - **唯一性**:全局索引支持表级的唯一性约束,而不只是分区级别的唯一性。 - **维护成本**:...
分区索引是指在分区表上创建的索引,分区索引可以提高查询性能,例如,全局索引和分区索引。 全局索引(Global Index) 全局索引是指在分区表上创建的索引,索引包含所有的分区数据,例如: CREATE INDEX idx_...
总结来说,分区表和分区索引是大型数据库管理的关键技术。通过合理地设计和管理,可以显著提高数据处理速度,降低存储成本,并简化数据库维护工作。理解和熟练掌握这些概念和技术,对于数据库管理员和开发人员来说至...
总结,分区表和分区索引是优化大规模数据库性能的重要工具,理解和掌握这些技术,能够帮助我们设计出更高效、可扩展的数据存储方案。在实际应用中,应根据具体业务场景和数据特性,灵活运用各种分区策略和索引类型,...
Oracle 分区表分区索引是 Oracle 数据库中的一种重要机制,它可以提高数据的存储和查询效率。下面将详细介绍 Oracle 分区表分区索引的类型、分类、创建方法和维护方式。 一、分区表和分区索引的概念 分区表是指将...
- **分区索引**:对于分区表,可以创建全局分区索引或局部分区索引。全局分区索引覆盖整个表,而局部分区索引仅覆盖其对应的分区,通常局部分区索引在查询只涉及特定分区时能提供更好的性能。 #### 总结 Oracle的...
在分区表上创建索引时,可以创建分区索引或全局索引。分区索引与表分区相对应,而全局索引则跨越所有分区。非分区表可以拥有分区或非分区索引,但分区表必须至少有一个分区键,最多可包含16个列,这些列可以是可为空...
#### 一、全局索引与分区表的关系 **全局索引**(Global Index)是指索引覆盖整个表的所有数据,而不受限于分区边界。这种类型的索引通常用于非分区列或者跨分区查询。 **实验验证:** 1. **创建分区表:** ...
总结而言,分区表和分区索引是数据库设计中的高级主题,正确理解和运用分区技术可以极大地优化数据库性能,尤其是在处理大规模数据集时。希望本文能帮助读者深入了解并掌握分区技术的核心概念和实践方法。
表可以按range、hash、list分区,表分区后,其上的索引和普通表上的索引有所不同,oracle对于分区表上的索引分为2类,即局部索引和全局索引,下面分别对这2种索引的特点和局限性做个总结。局部索引local index1.局部...
Oracle分区表是数据库管理系统Oracle中的一个高级特性,用于将大表分成较小、更易管理的部分,从而提高查询性能,优化存储管理和数据维护。在大型企业级应用中,尤其是在处理大量数据时,分区表是不可或缺的技术手段...
分区索引可以是局部索引或全局索引,全局索引可以跨越多个分区,而局部索引则只能作用于一个分区。 创建分区索引 创建分区索引可以使用以下语句: ```sql CREATE INDEX <index_name> ON () GLOBAL PARTITION BY ...
针对分区表,Oracle 提供了分区索引,它允许索引与分区策略相结合。例如,可以创建局部索引,每个分区都有自己的索引,或者创建全局索引,覆盖所有分区。局部索引通常在查询性能上有优势,而全局索引则适用于跨分区...
当涉及到批量删除或清除分区表中的数据时,就需要掌握一些特定的方法和技术。根据给定的信息“清除oracle分区表数据”,我们将深入探讨如何有效地进行这项操作。 ### 分区表简介 分区是将一个大的表或索引物理地...