发表于: 2005.04.20 23:52
分类: 读书笔记
出处: http://yangtingkun.itpub.net/post/468/27097
---------------------------------------------------------------
Oracle的分区技术用来支持非常大的表和索引。利用分区可以将一张大的表分成多个小的,易于管理的分区。
查询语句和DML语句访问分区表时不需要进行任何的修改。然而DDL语句可以避免对整个表或索引进行操作,而直接针对单独的分区进行操作。分区使得数据库中包含海量数据的表或索引的可管理性增强,而且分区完全对应用程序透明。
表或索引的分区具有相同的逻辑结果,而他们可以拥有各自的物理结构。分区适用于各种类型的应用程序:OLTP系统可以在可管理性和可用性方面得到提高;数据仓库系统可以从可管理性和性能方面获益。
分区表具有以下优点:
分区使得数据管理操作如数据装载、索引建立和重建、备份和恢复等在分区级别上完成,这比在表级完成操作要明显的节省时间;
分区可以提高性能,在很多情况下,查询可以通过扫描某个分区来完成,而不是去扫描整个表;
分区技术可以明显的降低因维护操作而计划停机带来的影响;
分区可以增加关键表的可用性;
分区的实施不需要修改现有任何的应用程序。
分区键:
分区表中的每条记录都唯一的属于一个分区,分区键就是确定一条记录属于哪个分区的一列或多个列。
分区键可以由1~16列组成,可以包含空值,不能包含ROWID、LEVEL或MLSLABEL等伪列。
分区表的限制:
最多可以包括64000个分区,不能包含LONG和LONG RAW字段。
索引组织表的分区限制:
只支持范围和HASH分区;
分区列必须是主键列的子集;
第二索引(除主键外的索引)可以分区;
OVERFLOW数据段采用和表保持等同分区(分区方式相同,分区的范围也相同,每个表分区都对应一个OVERFLOW分区)。
分区类型:
范围分区、HASH分区、列表分区和复合分区。
其中复合分区包含范围HASH分区和范围列表分区。
分区的建议:
表的大小超过2G就可以考虑是否分区;
包含历史数据的表。这种表一般采用时间字段的范围分区,新的数据总是装载到新的分区中。
分区索引包括两种:
本地分区索引和全局分区索引。
本地分区索引采用和表的等同分区,因此,在对分区进行操作时(如ADD PARTITION或DROP PARTITION等),Oracle会自动维护本地分区索引的正确性。
全局分区索引可以采用和表不同的分区范围或分区方式。一般对分区执行了DDL操作后,全局索引都会处于INVALID状态,不过9i增加了新的语法,UPDATE GLOBAL INDEXES,使得DDL在操作分区数据的之后维护全局索引的正确性。
分区索引的特性:
可以建立BITMAP分区索引,但是BITMAP索引必须是LOCAL的。
全局索引可以唯一,而本地索引只有在分区键是索引的一部分的情况下,才能唯一。
OLTP系统中的分区索引:
全局索引和唯一本地索引比非唯一本地索引具有更好的性能,因为他们只需要扫描特定的分区就可以了,而后者必须对所有分区进行扫描。
当存在对表分区的维护操作时,本地索引提供更好的可用性。
数据仓库和DSS系统中的分区索引:
更倾向于本地分区索引,因为本地分区索引在数据装载和分区维护操作中更易于管理。
由于可以多个分区并行扫描,本地索引可以提高性能。
分区与性能提升:
分区带来的性能提升来自三个方面:
Partition Pruning:Oracle根据查询条件自动将扫描范围缩小到一个或几个表(索引)分区上。这种方式其实是分区扫描替代了全表扫描。
Partition-Wise Join:如果连接查询的两张表都在连接列上进行分区,则Oracle会优化连接操作,将一个大的连接分成各个对应分区间的连接,而且这些分区连接操作还可以并行执行。
并行DML:采用并行执行,可以使操作并行在各个分区上同时执行,从而提供执行效率。











