第 14 章 分区 14.1 分区的使用 增加可用性 减轻维护负担 提高DML与查询的性能 14.2 分区如何工作 表分区策略 索引分区 本地索引 分为本地前缀索引(Local Prefixed Index)、本地非前缀索引(Local Non-prefixed Index) 1. 索引的选择 在单表查询中,本地非前缀索引可能增加可用性,也更加实用。例如表T(a, b)按a区间分区,若在b上建立本地索引,则当某个分区离线,仅查询b的某个值时,该索引可用,而索引(a, b)不可用;删除索引(a, b),查询(a, b)的某对值,b上的索引仍可用。此时若建立索引(b, a),则可应对各类查询。 在多表关联(如上例中按照(a, b)值关联)时,系统将发现代价较高而不会用到本地非前缀索引(如上例中(b, a))。 因此建立本地索引时应当考虑通常的使用环境。 2. 无法基于本地非前缀索引建立唯一键或主键。 全局索引 仅有一种,即全局前缀索引 1. 数据仓库环境 在(与建立好相应索引的表)交换分区与索引或分割分区后,全局索引将失效而必须重建,因此全局索引并不适合数据仓库。 例如: ALTER TABLE partitioned EXCHANGE PARTITION fy_1999 WITH TABLE fy_1999 INCLUDING INDEXES WITHOUT VALIDATION; ALTER TABLE partitioned SPLIT PARTITION the_rest AT (TO_DATE(‘200101’, ‘yyyymm’)) INTO (PARTITION fy_2000, PARTITION the_rest); 2. OLTP环境 一定程度上增加了可用性。当某些分区离线,不含有用于分区的列且合乎查询条件的数据存在于在线分区的索引仍然是可用的,对于不需要查询全表而是通过索引即可得到结果的查询也是有效的(例如COUNT非用于分区的列等)。