分区是将一个表或索引物理地分解为多个更小、更便于管理的部分。分区对应用透明,即对访问数据库的应用而言,在逻辑上只有一个表或一个索引,在物理上这个表或索引可能由数十个物理分区组成。每个分区都是一个独立的对象,可以独自处理,也可以作为更大对象的一部分处理。

使用场景

  • 当表非常大的时候(例如,表空间大于数据库服务器的物理内存),可以对表进行分区,从而提升数据库性能。例如,当表的数据库大于2 GB时,应该考虑使用分区。
  • 当大表用于存储历史数据,新数据均加入至某个最新的分区,该场景下建议使用分区表。例如,大表用于存储一年12个月的历史数据。当前月份的数据存在一个单独的分区中,该分区的数据是可更新的。而历史月份的数据则存在另一个只读的分区中。

功能优势

使用分区表可以提升数据库性能,具体表现在以下几个方面:

  • 在某种情况下,能极大地提高查询性能,尤其是当大部分访问次数较多的表中的记录都在一个分区中或分布在很少的分区中时。 分区操作允许您从索引的前面省略分区列, 减小索引尺寸并使其访问次数较多的部分符合内存。
  • 当要对一个分区表中大部分的内容进行查询或更新时,会适当提升性能。因为服务器会执行分区的顺序扫描而不会使用索引和随机访问无序阅读整个表。
  • 如果您想在分区中批量添加或删除数据,可通过添加或删除分区来实现。ALTER TABLE的速度要比批量操作的速度快很多,还可以避免DELETE操作引起的过多的VACUUM。

分区类型

分区类型有RANGE(范围)分区、LIST(列表)分区、HASH(散列)分区和子分区。划分依据主要是根据其表内部属性。

  • RANGE(范围)分区

    RANGE分区将数据基于指定的分区键映射到每一个分区中。这种分区方式最为常用,且常常采用日期作为分区键。INTERVAL RANGE分区是RANGE分区的扩展,详细信息,请参见INTERVAL RANGE分区

  • LIST(列表)分区

    LIST分区可以根据分区键的值明确指定哪些值的数据该放在哪个分区。

  • HASH(散列)分区

    HASH分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。

语法

关于各分区类型的分区表的相关命令及说明,例如创建分区表、添加分区至分区表、合并分区、拆分分区、删除分区等,请参见分区表命令列表