分区就是将一个非常大的table或者index 按照某一列的值,分解为更小的,易于管理的逻辑片段---分区。将表或者索引分区不会影响SQ
Partition介绍
分区就是将一个非常大的table或者index 按照某一列的值,分解为更小的,易于管理的逻辑片段---分区。将表或者索引分区不会影响SQL语句以及DML语句,就和使用非分区表一样,每个分区拥有自己的segment,因为,DDL能够将比较大的任务分解为更小的颗粒。分区表只有定义信息,只有每个存放数据的分区才有各自的segment。
就好象拥有多个相同列名,列类型的一个大的视图。
收益使用分区功能,可以提供的收益,可以从下面几个方面阐述:
性能可以减少检索数据的总量,因为拥有partitionpruing 以及partition-wise joins。
partition pruing:当谓词中(连接条件)带有partition key的时候,OracleDatabase可以自动的将不需要的partition裁剪掉,不需检索额外的partition 。
partition-wise joins:两个表做join的时候,partitionkey 作为连接条件,OracleDatabase可以将连接操作分成多个单表和每个partition的join piece。对于单线程来说,每次join的工作量小了,可以减少系统的开销。而对于多线程来说,每个join piece 都可以使用多线程,可以加快检索时间(但是消耗更多的cpu)。
管理使用分区技术,可以将管理维护大表或者索引的操作,分成多个维护片段,可以更灵活的管理和维护这些schema object。举个具体的例子来说,这里有一个装有重要文件的重达100公斤的箱子,你需要将它搬到办公室去,这是非常累的,甚至是无法达成的。但是如果使用了分区技术,等于将100公斤的箱子10等分,这时候,就可以每次搬一个小箱子即可。
可用性因为分区表中的每个分区在物理层面上都是隔离的------每个分区拥有自己的segment。所以当其中的一个分区不可用的时候,不会影响另外的分区。
Partition 分类Partition可以简单分为范围、哈希、列表三种方式。以下说明了每种分区方式的适用场景。
Range Partitioning 适用场景Range Partitioning 比较适用时间列,当然也有其他的适用场景,比如说那些连续的Column Value映射的行有特殊意义的,人的年龄、商品价位等。
11g开始,,支持一种新的RangePartition方式,Interval partition,它可以根据选项自动创建需要的分区。
List Partitioning适用场景