oracle分区表和分区索引的概念

Partitioning Key 分区键
就是决定分区的规则的一列或多列,oracle会自动完成insert、update和delete操作到合适的分区中。

Partitioned Tables
分区表可以包含100万独立分区。但是分区表不能有LONG or LONG RAW 类型的行,可以有CLOB or BLOB 类型的行。

建议使用分区的表:

  • 大于2GB的表
  • 历史数据表,更新最新数据到新的分区,查询其他分区的数据。数据写入读取分开。读写分离。
  • 表的内容必须分布在不同存储设备上时

建议使用分区索引:

  • 避免数据remove的时候重建整个索引
  • 在不使整个索引无效的情况下,维护部分数据。
  • 减少索引对具有单调递增值得列造成索引倾斜的影响

Partitioned Index-Organized Tables 分区索引组织表
索引组织表中,行存储在表的主键定义的索引中,因此索引就是数据,数据就是索引。

分区的好处:

提升数据库性能、可管理性和可用性。( improving performance, manageability, and availability)

  • Partitioning for Performance 分区的性能。 限制了查询和操作的数据量;为并行操作提供数据分布。分区特性包括:
    – Partition Pruning 分区裁剪:是使用分区提高性能的最简单也是最重要的方法。分区修剪可以使用Oracle的所有性能特性
    –Partition-Wise Joins :分区还可以使用分区连接技术提高多表连接的性能。分区连接可以应用于正在连接两个表并在联接键上对两个表进行分区的情况,或者当引用分区(reference partitioned)表与其父表连接时。分区连接将大连接分解为每个分区之间的小连接,从而在更短的时间内完成整个连接。这为串行和并行执行提供了显著的性能优势。

  • Partitioning for Manageability 分区可管理性。分区使您能够将表和索引划分为更小的、更易于管理的单元。维护操作可以集中在表的特定部分。例如,您可以备份表的单个分区,而不是备份整个表。

  • Partitioning for Availability 分区可用性。分区数据库对象提供分区独立性。分区独立性的这一特性可以成为高可用性策略的重要组成部分。数据库管理员可以指定每个分区存储在一个单独的表空间中。

Partitioning Strategies 分区策略

Oracle分区提供了三种基本的数据分发方法作为基本的分区策略,用于控制如何将数据放置到各个分区中。

  • Range
  • Hash
  • List

Range Partitioning
根据为每个分区建立的分区键的值的范围将数据映射到分区。它是最常见的分区类型,通常与日期一起使用。对于以date列作为分区键的表,1- 2010分区将包含分区键值为01-Jan-2010到31-Jan-2010的行。
Hash Partitioning
根据Oracle应用于标识的分区键的哈希算法将数据映射到分区。哈希算法在分区之间均匀地分布行,使分区的大小大致相同。
特别是当要分区的数据不是历史数据或没有明显的分区键时,Hash Partitioning是Range Partitioning的一种易于使用的替代方法。
List Partitioning
通过在每个分区的描述中为分区键指定一个离散值列表,列表分区使您能够显式地控制行如何映射到分区。
通过使用默认分区(default)能够避免为列表分区表指定所有可能的值,这样,所有不映射到任何其他分区的行都不会生成错误。

Composite Partitioning 复合分区 又包含许多小项:

  • Composite Range-Range Partitioning:复合范围分区支持沿两个维度的逻辑范围分区;例如,按order_date进行分区,按shipping_date进行范围子分区。
  • Composite Range-Hash Partitioning:使用范围方法对数据进行分区,并在每个分区内使用哈希方法对数据进行子分区。它提供了范围分区的可管理性以及哈希分区的数据放置、条带和并行性优势。
  • Composite Range-List Partitioning:使用范围方法对数据进行分区,在每个分区内使用列表方法对数据进行子分区。它提供了范围分区的可管理性以及子分区的列表分区的显式控制。
  • Composite List-Range Partitioning:支持给定列表分区策略中的逻辑范围子分区;例如,按country_id列出分区,按order_date列出范围子分区。
  • Composite List-Hash Partitioning:支持列表-分区对象的哈希子分区;例如,要启用partition-wise joins。
  • Composite List-List Partitioning:支持沿两个维度的逻辑列表分区;例如,按country_id进行列表分区,按sales_channel进行列表子分区。

Partitioning Extensions 分区扩展

除了基本的分区策略之外,Oracle数据库还提供了以下类型的分区扩展:

  • Manageability Extensions
    以下扩展极大地增强了分区表的可管理性:
    Interval Partitioning 间隔分区:指数据库在插入到表中的数据超过所有现有的范围分区时自动创建指定区间的分区。必须指定至少一个范围分区。范围分区键值决定了范围分区的高值,该值称为转换点(transition point),数据库为具有超过该转换点的值的数据创建区间分区。
    请考虑以下限制:
    1、您只能指定一个分区键列,它必须是数字或日期类型。
    2、对于索引组织的表,不支持区间分区。
    3、不能在分区间表上创建域索引(domain index)。
    您可以创建单级间隔分区表和以下复合分区表:
    Interval-range
    Interval-hash
    Interval-list
    Partition Advisor 分区顾问:是SQL Access顾问的一部分。它可以根据SQL缓存提供的SQL语句的工作负载、SQL调优集或用户定义的工作负载,为表推荐分区策略。

Partitioning Key Extensions 分区键扩展

下面的扩展扩展了定义分区键的灵活性:

  • Reference Partitioning :支持通过引用约束对彼此相关的两个表进行分区。分区键通过现有的父-子关系进行解析,并由启用和活动的主键和外键约束强制执行。
    这种扩展的好处是,具有父子关系的表可以通过继承父表的分区键而不复制键列来实现逻辑上的均分。逻辑依赖关系还自动级联分区维护操作,从而使应用程序开发更容易,更不易出错。
    所有基本的分区策略都可用于Reference Partitioning。Interval partitioning 不能与reference partitioning一起使用。

  • Virtual Column-Based Partitioning:在以前的Oracle数据库版本中,只有在表中物理存在分区键的情况下,才能对表进行分区。虚拟列消除了这种限制,并允许使用表的一个或多个现有列由表达式定义分区键。表达式仅存储为元数据。
    Oracle分区得到了增强,可以在虚拟列上定义分区策略。例如,10位的帐户ID可以包含帐户分支信息作为前三位。通过扩展基于虚拟列的分区,可以使用虚拟(派生)列ACCOUNT_BRANCH扩展包含ACCOUNT_ID列的ACCOUNTS表。ACCOUNT_BRANCH派生自ACCOUNT_ID列的前三位,该列成为该表的分区键。

Partitioned Indexes

就像分区表一样,分区索引提高了可管理性、可用性、性能和可伸缩性。它们既可以独立分区(全局索引),也可以自动链接到表的分区(本地索引)。通常,应该为OLTP应用程序使用全局索引,为数据仓库或决策支持系统(DSS)应用程序使用本地索引。此外,尽可能使用本地索引,因为它们更容易管理。

在决定使用哪种分区索引时,应该按照以下顺序考虑以下指导原则:

  1. 如果表分区列是索引键的子集,则使用本地索引。
  2. 如果索引是惟一的,并且不包含分区键列,则使用全局索引。
  3. 如果优先级是可管理性,那么使用本地索引。
  4. 如果应用程序是OLTP类型,用户需要快速响应时间,那么使用全局索引。如果应用程序是DSS类型,并且用户对吞吐量更感兴趣,那么使用本地索引。

分区索引的类型:

  • Local Partitioned Indexes:本地分区索引比其他类型的分区索引更容易管理。它们还提供更大的可用性,在DSS环境中很常见。本地索引的每个分区都与表的一个分区相关联。该功能使Oracle能够自动保持索引分区与表分区同步,并使每个表索引对独立。使一个分区的数据无效或不可用的任何操作只影响一个分区。
    不能显式地将分区添加到本地索引。相反,只有在向基础表中添加分区时,才会将新分区添加到本地索引中。同样,您不能显式地从本地索引删除分区。相反,只有在从基础表中删除分区时,才会删除本地索引分区。
    本地索引可以是惟一的。但是,为了使本地索引惟一,表的分区键必须是索引键列的一部分。
  • Global Partitioned Indexes:
    –Global Range Partitioned Indexes:具有灵活性,因为该索引分区的分区方法和分区键完全独立于该表的分区方法。
    –Global Hash Partitioned Indexes:通过在索引单调增长时分散争用来提高性能。
  • 维护全局分区索引:
    默认情况下,对堆组织表上的分区执行以下操作将所有全局索引标记为不可用:
    ADD (HASH)
    COALESCE (HASH)
    DROP
    EXCHANGE
    MERGE
    MOVE
    SPLIT
    TRUNCATE
    可以通过将子句UPDATE indexes附加到操作的SQL语句中来维护这些索引。维护全局索引的两个优点是:
    –索引在整个操作过程中保持可用性和在线状态。因此,没有其他应用程序受到此操作的影响。
    –该索引不必在操作之后重新构建。

你可能感兴趣的:(schema)