DB2 数据库将数据存储在表中。有几种类型的表可以存储永久性数据,如多维集群表、分区表和范围集群表。除了用于存储永久性数据的表之外,也有一些表可用来展示结果、汇总表、临时表。 根据数据的显示形式和事务类型,您可能会找到一个表类型,提供可以为您的环境优化存储和查询性能的特定功能。
选择合适的表类型
表类型的选择取决于业务和应用程序的需求、表中存储的数据的性质和查询的性能要求。下节描述了每种表类型适合在何时使用。
基表
基表可以保存永久性数据。DB2 数据库的基表有以下几种类型:
常规表
有索引的常规表用于一般用途。
范围分区表
表分区是一种数据组织架构,在该架构中,根据一个或多个表分区键列,可以将表数据划分为多个称为数据分区的存储对象。表是按列值范围进行分区的,并且可以在每个数据分区上提供本地索引,也可以在整个表上提供全局索引。
多维集群 (MDC) 表
MDC 表同时在多个键或维度上物理地聚集在一起。MDC 表在复合维度内提供有保证的集群。
范围集群 (RCT) 表
RCT 表被实现为数据的顺序集群,可以提供快速、直接的访问。在创建表时,根据记录大小和存储的最大记录数预分配整个页面范围。
以下各节更详细地介绍了部分这些基表,以及其他类型表,比如临时表。在本文中,我们并不打算讨论物化查询 (MQT) 表。MQT 是改进复杂查询的响应时间的一种有力途径,因此更适用于">数据仓库环境。
拆分表
创建一个数据模型,将数据存储在多个表中,并根据应用程序需求和使用放置列,这将提供更好的性能。在设计一个表时,应考虑应用程序将如何使用数据,以及应用程序的要求。
在 OLTP 环境中,将一个大表拆分为多个部分,与必须扫描一个大表的查询相比,可以提高查询性能。 考虑以下场景:您要创建一个有 500 列的表。但是,您的应用程序只会频繁地用到 500 列中的 50 列。在该场景中,创建一个有 500 列的大表会导致性能较低,因为大表减少了在一个页面中可以容纳的行数。与读取只包含常用列的相同行集相比,较少的每页面行数会导致读取时有更多 I/O。此外,缓冲池命中率很低,并且应用程序会读取不需要的列。 这两节将会描述范围分区和多维集群表,按范围值和/或维度划分表,并将数据存储组织成多个部分,还会介绍如何通过利用这些表所提供的好处提高查询性能。
范围分区表
在 OLTP 环境中,表分区可用于大表,以便提供更轻松的维护和更好的查询性能。DB2 优化器会执行范围消除,并扫描相关的分区,以提高查询性能。范围分区表的在线维护旨在使维护变得更轻松,并减少对大表的整体管理成本,因为它具有以下特性:
BACKUP、RESTORE 和 RUNSTATS 命令可以每个表分区级别上运行。
表分区可以轻松地被转入和转出数据库。
灵活的索引放置。
自 DB2 Version 9.7 起,分区级的重组使维护变得更容易,而分区的本地索引则提供了更好的性能。本地索引优于全局索引,因为在附加或拆离分区时,本地索引不需要进行索引清理。 在下列情况下
使用范围分区表:
您的应用程序需要一个较大的表容量。
您的数据可以基于一个或多个列值范围逻辑地组织成多个数据分区。
您的应用程序需要大范围数据的快速在线转入和转出。
您的业务需要对每个数据进行分区,而不是对整个表进行备份和恢复。将数据分区放置在不同的表空间,以实现特定范围的数据的备份和恢复。
您希望通过分区消除和本地索引提高查询性能。
您的业务目标包括更好的数据生命周期管理。