赞
踩
目录
数据库支持分区类型:
多层分区设计例子:
数据库把表划分成部分(也称为分区)来启用大规模并行处理。 表分区在使用PARTITION BY(以及可选的SUBPARTITION BY)子句的CREATE TABLE执行期间创建。 分区操作会创建一个顶层(父)表以及一层或者多层子表。 在内部,数据库会在顶层表和它的底层分区之间创建继承关系,类似于PostgreSQL的INHERITS子句的功能。
使用表创建时定义的分区标准来创建每一个分区及其上一个可区分的CHECK约束,这个约束限制了该表能含有的数据。 查询优化器使用CHECK约束来决定要扫描哪些表分区来满足一个给定的查询谓词。
系统目录存储了分区层次信息,这样插入到顶层父表的行会被正确地传播到子表分区。 要更改分区设计或者表结构,可使用带有PARTITION子句的ALTER TABLE修改父表。 要把数据插入到一个分过区的表中,用户需要指定根分区表,也就是用CREATE TABLE命令创建的那个表。 用户也可以在INSERT命令中指定分区表的一个叶子子表。 如果该数据对于指定的叶子子表不合法,则会返回一个错误。 不支持在DML命令中指定一个非叶子或者非根分区表。
数据库不支持对复制表进行分区(DISTRIBUTED REPLICATED)。 不是所有的哈希分布表或随机分布表都适合于分区。 如果下列问题的答案全部或者大部分都是是,表分区就是一种可行的改进查询性能的数据库设计策略。 如果下列问题的答案大部分都是否,表分区对于该表就不是正确的方案。 请测试用户的设计策略来确保查询性能能得到预期的改进。
不要创建超过所需数量的分区。 创建过多的分区可能会拖慢管理和维护工作, 例如清理、恢复实例、扩展集群、检查磁盘用量等。除非查询优化器能基于查询谓词排除一些分区,否则分区技术不能改进查询性 能。 每个分区都扫描的查询运行起来会比表没有分区时还慢,因此如果用户的查询中很少能排除分区,请避免进行分区。 请检查查询的解释计划来确认分区被排除。
在选定一种多级分区策略之前,可以考虑一种带有位图索引的单级分区。 索引会降低数据装载的速度,因此推荐用用户的数据和模式进行性能测试以决定最佳的策略。
对于每个分区级别,一个已分区的表最多能有32,767个分区。已分区表上的主键或者唯一约束必须包含所有的分区列。 一个唯一索引可以忽略分区列,但是它只能在已分区表的每个部分而不是整个已分区的表上被强制。用DISTRIBUTED REPLICATED分布策略创建的表不能被分区。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。