分区表和索引(3)

分区索引概述
与分区表一样,分区索引提高了可管理性,可用性,性能和可扩展性。它要么被独立地分区(全局索引)或自动地连接到某张表的分区方法(本地索引)。总之,你可以为OLTP应用程序使用全局索引和为数据仓库或决策应用程序使用本地索引。此外,无论何时尽可能使用本地索引,因为它更容易管理。当决定使用什么类型的分区索引时,你可以按顺序考虑以下的指引:
1. 如果表的分区列是索引键的一个子集,使用本地分区索引。如果是这种情况,你可以结束了。如果不是这种情况,继续指引2。
2. 如果索引是唯一的,使用一个全局索引。如果是这种情况,你可以结束了。如果不是这种情况,继续指引3。
3. 如果你的优先级是可管理性,使用一个本地索引。如果是这种情况,你可以结束了。如果不是这种情况,继续指引4。
4. 如果应用程序是一个OLTP并且用户需要快速响应时间,使用一个全局索引。如果是一个DSS应用程序并且用户对于吞吐量更感兴趣,使用本地索引。

See Also: Oracle Database Data Warehousing Guide and Oracle
Database Administrator's Guide for more information about partitioned
indexes and how to decide which type to use

本地分区索引
本地分区索引比其它类型的分区索引更容易管理。它们也提供了更好的可用性并且在DSS环境中很常见。这个原因是均衡:每个分区的本地索引精确的关联到该表的一个分区。这能够使Oracle自动的让索引分区与表分区保持同步,并使得表-索引对独立。任何让一个分区数据无效或不可用的动作只会影响独立的一个分区。

当有在表上进行分区或子分区维护操作时,本地分区索引支持更多的可用性。一种称为本地非前缀类型的索引对于历史数据库来说是非常有用的。在这种类型的索引中,分区是不会在索引列的左前缀上的。

See Also: Oracle Database Data Warehousing Guide more information
about prefixed indexes

你不能显示的增加一个分区到一个本地索引中。相反的,只有当你增加一个分区到一张潜在的表里时,新的分区才会被增加到本地索引中。同样地,你不能从一个本地索引里显示的删除一个分区。相反的,只有当你从潜在的表里删除一个分区时,本地分区索引才被删除。

一个本地索引可以是唯一的。可是,对于一个本地为了唯一,表的分区键必须是索引键的列的一部分。对于OLTP环境来说唯一本地索引是非常有用的。
Figure 18–6 offers a graphical view of local partitioned indexes.

全局分区索引
Oracle提供了两种类型的全局分区索引:Range分区和Hash分区。
全局Range分区索引
全局Range分区索引在分区的程度上是很方便的并且分区键独立于表分区方法。它们通常被用在OLTP环境中并提供了对任何个别的记录的有效访问。

一个全局索引的最高分区必须有一个分区边界,边界值是MAXVALUE。这能确保在潜在表中的所有行能在索引中被表示。全局前缀索引可以是唯一的,也可以是非唯一的。

你不能增加一个分区到一个全局索引中,因为最高分区通常是具有一个边界为maxvalue的分区。如果你想要增加一个新的最高分区,使用ALTER INDEX SPLIT PARTITION 语句。如果一个全局索引的分区是空的,你可以显示的通过ALTER INDEX DROP PARTITION语句删除它。如果一个全局索引分区包含数据,删除掉分区将导致下一个最高分区被标记为不可用。你不能在一个全局索引中删除掉最高分区。
全局Hash分区索引
全局Hash分区索引在索引单向增长时通过传播竞争来提高性能。换而言之,大量的索引插入只发生在某个索引的右边缘。
全局分区索引的维护
默认情况下,在堆组织表上的分区上的以下操作标记全局索引不可用:
ADD (HASH)
COALESCE (HASH)
DROP
EXCHANGE
MERGE
MOVE
SPLIT
TRUNCATE
通过为这些操作在SQL语句后附加UPDATE INDEXES子句来维护索引。维护全局索引有以下两个优点:
 贯穿这些操作,索引仍然可用和在线。今后没有其它应用程序受这个操作影响。
 这些操作后索引不需要被重建。

比如:DROP TABLE DROP PARTITION P1 UPDATE INDEX;
===============================================================================
注意:只有堆组织表支持这些特征。

See Also: Oracle Database SQL Reference for more information about
the UPDATE INDEXES clause

图18-7提供了一张全局分区索引的图形化视图:


全局非分区索引
全局非分区索引表现的跟一张非分区索引一样。它们通常被用在OLTP环境中并对任何单独记录提供了有效的访问:
图18-8提供了一张全局非分区索引的图形化视图:

关于在分区表上创建索引的各种信息
你可以在分区表上创建位图索引,使用位图索引必须是本地索引这个约束,它们不能是全局索引。

全局索引可以是唯一的,如果分区键是索引键的一部分时,本地索引只能是唯一的。
在OLTP应用程序中使用分区索引
以下是对于OLTP应用程序的一些指引:

 全局索引和唯一,本地索引比非唯一本地索引提供了更好的性能,因为它们最小化了索引分区探测的数量。
 当在表上的分区和子分区上进行维护操作时,本地索引提供了更好的可用性。
 全局Hash分区索引在索引单向增长时通过传播竞争来提高性能。换而言之,大量的索引插入只发生在某个索引的右边缘。
在数据仓库和决策支持应用程序中使用分区索引
以下是对数据仓库和决策支持应用程序中的一些指引:
 本地索引是首先,因为它们在数据加载和分区维护操作期间更容易管理。
 本地索引可以提高性能,因为许多索引分区可以通过在索引键上的范围(RANGE)查询来并行扫描。
组合分区上的分区索引
以下是在组合分区上使用分区索引时要记住的一些点:
 子分区索引通常是本地的且默认情况下与表的子分区存储在一起。
 要么在索引级要么在索引子分区级指定表空间。

猜你喜欢

转载自refurbish.iteye.com/blog/1876058