DB2面向OLTP环境的物理数据库设计:索引

在 DB2 数据库中,索引是按一个或多个键的值进行逻辑排序的一组指针。指针可以引用表中的行、MDC 表中的块,或在 XML 存储对象中的 XML 数据。 索引通常用于加快对表中的行的访问。若在表上定义了良好的索引,查询就可以更快地访问行。

索引是数据库对象。它们是物理对象,而不是逻辑对象(如,视图)。因此,索引也占用">存储空间,需要那些会占用系统资源的必要维护。一组精心设计的索引可以提高 DB2 系统的性能。

索引类型

索引有多种类型,在设计物理 DB2 数据库模型时可根据不同目的进行选择。

惟一索引和非惟一索引

您可以使用惟一索引在表的索引列上强制惟一性。如果表上创建惟一索引,行在索引键列上不能有相同的数据值。非惟一索引对表没有这种约束。

集群和非集群索引

集群索引是数据页面中行的顺序与索引中行的顺序相对应的索引。一个表中只能存在一个集群索引。然而,对一个表上的非集群索引的数量并没有实际限制。

分区和非分区索引

这些类型的索引只适用于范围分区表。分区索引由一组索引分区组成,其中每个索引分区都包含相应数据分区的索引条目。每个索引分区只包含对其相应数据分区中的数据的引用。非分区索引可应用于整个表。

XML 索引

在 XML 列上建立的索引是 XML 索引。XML 索引使用一个特定的 XML 模式表达式为 XML 文档中的路径和值建立索引,这些 XML 文档存储在单个 XML 列中。

多维集群 (MDC) 块索引

当创建 MDC 表时,会自动创建两个索引:一个维度块索引,其中包含一个维度的每个被占用块的指针;一个复合块索引,其中包含所有维度键列,用于在插入和更新活动期间维护集群。

OLTP 工作负载的索引指南

在一个特定的表上可以定义不超过 32767 的任意数量的索引。它们对查询性能可以起到有益的作用。

索引管理器必须在删除、插入和更新操作期间维护索引。OLTP 工作负载的主要组成部分包括删除、插入和更新操作。因此,如果为一个接收许多更新的表建立大型索引键或多个索引,则有可能会减缓这些操作的处理。 索引使用磁盘空间是因为这些空间是物理数据库对象。所使用的磁盘空间量根据键列的长度和被索引的行数而有所不同。索引的大小随着更多数据被插入到表中而增加。因此,在规划数据库的大小时应考虑被索引的数据量。

索引还是不索引

在考虑表上的索引时,请注意,这些好处会带来一定的成本。索引的惟一目的是加快从表中查找某个特定的值。除了存储成本之外,还有删除、插入和更新操作中的额外的索引维护成本。 在创建索引时请记住,虽然索引可以提高读取性能,但它们会给写性能带来负面影响。出现这种负面影响是因为数据库管理器必须更新写入表中的每一行的索引。因此,只应在有明确的整体性能优势时才能创建索引。

索引列的良好候选者

在所有主键 (PK) 和大部分外键上建立索引 (FK),这很重要,因为大多数联接发生在 PK 和 FK 之间。FK 索引也提高了引用完整性检查的性能。为 PK 索引显式提供索引,可以实现更简单的管理。如果您没有指定 PK,DB2 数据库管理器会自动生成一个使用系统生成的名称的 PK,这更加难以管理。 经常在 WHERE、GROUP BY 或 ORDER BY 子句中引用的列是很好的索引候选列。此规则的一个例外是谓词提供了最低限度的筛选。索引对于不等式几乎没用,因为不等式提供有限的筛选。在 WHERE 子句中,不等式示例是 WHERE cost <> 4。

选择复合索引的前导列有利于匹配索引扫描。前导列应该能够反映经常在 WHERE 子句中使用的列。DB2 数据库管理器只通过在 WHERE 子句中所使用的前导列的 B-tree 索引自上而下进行导航,该导航也称为匹配索引扫描。如果某个索引的前导列不在 WHERE 子句中,优化器可能仍然使用该索引,但优化器被迫在整个索引中使用非匹配索引扫描。 同样,在频繁查询的 GROUP BY 子句中出现的列也可能会受益于索引的创建。如果用于分组的值的数量相对于被分组的行的数量较小,这些列的受益会特别明显。

按索引键对列进行排序,从最独特的列到最不独特的列,这可以提供更快的数据访问。虽然按索引键对列进行排序在创建索引时并无区别,但对于优化器,在决定是否使用索引时,这可能会有明显区别。例如,如果一个查询有一个 ORDER BY col1,col2 子句,那么可能会使用在 (col1,col2) 上创建的索引,但可能不会使用在 (col2,col1) 上创建的索引。同样,如果查询指定了一个条件,如 WHERE col1 >= 50 and col1 <= 100 or WHERE col1=74,那么在 (col1) 或在 (col1,col2) 上的索引可能会有用,但在 (col2,col1) 上使用索引的机会就少得多。

使用包含列可以启用数据检索的仅索引访问,从而提高性能。包含列并不是惟一索引键的一部分,但它在索引中储存或维护。通过使用 CREATE INDEX 语句的 INCLUDE 子句,在创建惟一索引时可以指定包含列。只有惟一键列会被排序,并被视作惟一。 例如,如果在 col1上有一个惟一索引,并且 col2被指定为包含列,像 SELECT col1, col2 FROM table1 WHERE col1 < 10 这样的查询会导致仅索引 (index-only) 访问。 包含列会增加索引的空间要求。如果经常更新所包含的列,包含列也会增加索引维护成本。更新包含列的维护成本小于更新键列的成本,但大于更新不属于索引的列的成本。

时间: 2014-12-19

DB2面向OLTP环境的物理数据库设计:索引的相关文章

DB2面向OLTP环境的物理数据库设计:数据库操作和维护

在数据库系统进入生产环境之后,工作重点会转向对数据库系统的日常维护.日常运营方面包括性能管理.问题诊断和维护,它们必须继续满足业务http://www.aliyun.com/zixun/aggregation/14189.html">服务水平协议. 面向 OLTP 环境的物理数据库设计应包括运营和维护任务的时间表.本节提供了此类活动的总结. 恢复策略 作为 RAS 整体策略的一部分,恢复策略在满足您的 RAS 目标中发挥着重要作用.虽然事实上在许多层次上都存在冗余,但在定义恢复点目标 (R

DB2面向OLTP环境的物理数据库设计:表空间和缓冲池

在设计表空间和物理设备上的容器位置时,我们的目标是最大限度地提高 I/O 的并行度,增加缓冲区利用率和缓冲池命中率.为了实现这一目标,您需要透彻了解数据库设计和应用程序. 了解表空间和缓冲池的工作原理以及它们影响数据库的整体性能的方式,这可以帮助您确定一些问题,例如,将两张表分隔到不同的设备是否会导致并行 I/O,或者是否应在一个单独的表空间中创建一个表,使该表可以被完全缓冲. 您的设计中要考虑的两个主要存储领域是: 1. 表空间.表空间的类型和设计可以决定对该表空间所执行的 I/O 效率. 2

DB2面向OLTP环境的物理数据库设计:查询设计

在最基本的层面,包括选择.插入.更新和删除在内的 SQL 操作是应用程序与 DB2 数据库进行交互的方式.应用程序的总体性能和体验受到该应用程序所用的 SQL 操作的影响. 设计.维护.监视和调优 SQL 查询的完整处理超出了本文的范围.然而,我们从较高层次概述了查询设计的工具和一般准则,因为查询设计和物理数据库设计彼此密切相关. 大多数物理数据库设计的特征对 SQL 语句并不明显,但为了更好地使用 DB2 特性,在编写查询时需要考虑到数据库的物理特征,如索引.例如,使用范围分区表时,选择查询即

DB2面向OLTP环境的物理数据库设计:数据建模

收集需求并创建逻辑模型,这是良好的物理数据库设计的关键. 数据建模的第一步是收集需求.该步骤涉及识别需要维护的关键业务工件.数据和信息.这些业务工件被称为实体.对于http://www.aliyun.com/zixun/aggregation/7976.html">在线购物目录,有关客户.产品和定价的信息都是业务关键信息,即实体. 可以通过利益相关者的输入来收集需求.需求和数据模型通过迭代方式向对方输送数据而得到进一步完善,从而创建一个逻辑模型. 图 1 显示了迭代数据建模范例: 收集需求

DB2面向OLTP环境的物理数据库设计:表

DB2 数据库将数据存储在表中.有几种类型的表可以存储永久性数据,如多维集群表.分区表和范围集群表.除了用于存储永久性数据的表之外,也有一些表可用来展示结果.汇总表.临时表. 根据数据的显示形式和事务类型,您可能会找到一个表类型,提供可以为您的环境优化存储和查询性能的特定功能. 选择合适的表类型 表类型的选择取决于业务和应用程序的需求.表中存储的数据的性质和查询的性能要求.下节描述了每种表类型适合在何时使用. 基表 基表可以保存永久性数据.DB2 数据库的基表有以下几种类型: 常规表 有索引的常

DB2面向OLTP环境的物理数据库设计:数据类型

为一个数据库设计表,这涉及到选择一个合适的http://www.aliyun.com/zixun/aggregation/14208.html">数据模型和数据类型.数据类型是一个列属性定义,它指示了应该将什么类型的数据存储在一个表列中. 根据所存储的数据的性质小心选择正确的数据类型,这有助于最大限度地减少存储需求. 最大限度地减少数据行消耗的空间,这有助于将更多行放在一个数据页面中.如果一个数据页面中有更多的行,那么这样可以提高缓冲池命中率,减少 I/O 成本,并实现更好的查询性能.DB

DB2面向OLTP环境的物理数据库设计:数据和索引压缩

您可以通过使用内置在 DB2 for Linux, UNIX and Windows 数据库中的压缩功能来减少表.索引和备份映像的大小,从而减少数据所需的存储量. 表和索引通常包含重复信息.这种重复可能是单独或合并的列值,也可能是列值的共同前缀,或者是在 XML 数据中的重复模式.压缩方法可以使用短字符串或符号来代替重复的信息. 您可以使用一些压缩功能来减少存储表和索引功能所需的空间,同时也可以采用一些功能来确定压缩可以提供的节省.您还可以使用备份压缩来减少备份的大小. DB2 Version

DB2面向OLTP环境的物理数据库设计:可靠性、可用性和可伸缩性

为了跟上如今全球化程度不断增加且日益竞争激烈的市场,您的http://www.aliyun.com/zixun/aggregation/10145.html">企业架构必须有足够的灵活性,能够随着未来战略性需求的变化而一起成长,并在计划内和计划外停机中确保业务连续性. 对于任务关键型的 24x7 企业,一个小时的停机时间可以转化为数百万美元的收入损失,更不用说商业信誉的损害和潜在的客户流失.全球化企业都是跨时区运营的,提供全天候的业务服务.系统维护和升级的定期维护窗口已不复存在.分布式企业

DB2面向OLTP环境的物理数据库设计:数据库事务日志

数据库事务日志对于数据库恢复至关重要,也是设计高度可用的数据库解决方案的一个重要组成部分. 数据库日志使得从故障中恢复成为可能.它们还可以在 HADR 环境中同步主数据库和备用数据库. DB2 对每个数据库使用一组独立的日志文件. 所有数据库都有与自己有关联的日志.这些日志保留数据库变更的记录.如果数据库需要还原到最后一次完整离线备份之前的某个点,日志需要将数据前滚到故障点.DB2 数据库支持两种类型的数据库的日志:循环日志和归档日志. 循环日志 循环日志仅支持崩溃恢复,也就是说,如果 DB2