2010-08-05 376 views
4

ibm db2 db中reorg命令的用法是什么? Reorg在内部做什么? 如果在表上创建新索引,是否需要运行reorg?IBM DB2中reorg命令的用法是什么?

+0

我投票结束这个问题作为题外话,因为它不是关于编程。 – Nifle 2015-11-03 11:35:41

回答

1

我相信它的工作方式与SQL Server中的DBCC DBREINDEX命令相同。这是类似于磁盘defragmentaiton,该指数随着时间的推移分散,作为记录被删除,等它肯定加快东西......

您可能已经有这个环节,但它在这里描述...

http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/core/r0001966.htm

新增

我想回答你关于它是如何工作以及为什么它是必要的,而且我没有找到具体到DB2的任何问题。我发现的最好的文章与SQL Server相关,但概念完全相同。这篇文章解释了什么是索引碎片,以及它为什么减慢速度。

将其转换到IBM DB2,这些文件以相同的方式进行相同的碎片整理。

http://www.sql-server-performance.com/articles/per/Analyze_and_Fix_Index_Fragmentation_in_SQL_Server_2008_p1.aspx

+0

只是表明其他数据库供应商的文档与IBM DB2相比要更好一些 – Cshah 2010-08-06 09:19:06

1

当你删除(至少在iSeries)DB2的记录(或行),它标志着记录删除,但不会从物理上删除的记录。当reorg运行时,它将这些记录标记为删除,然后物理删除它们。我相信它也会移动所有数据记录以在此过程中获得最佳性能。在iSeries上,通过告诉文件(或表)重用删除记录,可能会使此需求过时。

正如我暗示的那样,我知道DB2 for iSeries(或IBM i)就是这种情况。我只能假定这个过程在DB2上类似。

0

实际上,它将物理记录放回主键顺序,并在正确的位置使用正确的可用空间量(由PCTFREE指定)。

很明显,这也需要重建索引,这样就会产生很好的平衡树结构。

0

的REORG操作执行以下功能:

  • 检查参照完整性,如果适用于目标表,并且或者删除破坏它的行或无效任何受影响的索引。 (参照完整性是表中每个外键值存在于参考表中的主键值的关系属性。

  • 对表中的一个或多个索引执行内部重组(所有类型)来改进这些信息的内部存储,从而提高索引用于访问数据时的性能,可以重建所有索引,有选择地重建一个或多个命名索引,或者有选择地重建一个或多个命名索引的一个或多个分段。

  • 填充使用CREATE INDEX语句创建的DEFERRED索引。DEFERRED索引是一个空索引结构,可以在以后填充该数据结构

  • 重建预先计算的视图。例如,如果在应用程序中将预先计算的视图维护设置为OFF,则可以使用REORG命令仅重建预先计算的视图,而不触及目标表上的索引。或者,您可以使用REORG命令重建索引和视图。

除重建聚合表数据外,REORG命令还重建聚合表上的索引。

一个REORG操作是必须在下列情况下:

  • ,如果你使用一个数据库还原操作来还原一个表或索引的各段重建受影响的索引。

  • 无论何时对数据库的修改影响超过约30%的数据,都可以使用REORG语句为直接修改的任何表运行TMU。定期用REORG语句重建这些表和索引可确保参照完整性和最佳性能。

  • 重新组织无效的STAR索引。某些操作可能会使STAR索引无效。例如,增加表上的MAXROWS PER SEGMENT或MAXSEGMENTS参数或使用ALTER语句扩展段时,可能会使引用修改表的表的STAR索引失效。这些操作总是生成一条警告消息,说明基于修改表的STAR索引可能无效,在这种情况下,需要重新组织受影响的STAR索引。您可以在发出消息时重新组织受影响的索引,或者安排REORG操作以获得更方便的时间。但是,对具有无效索引的表的任何非查询(INSERT,UPDATE或DELETE)操作都会导致必须重新组织索引的错误消息。在可以访问表进行INSERT,UPDATE,DELETE或LOAD操作之前,您必须执行REORG操作。

REORG是不必要在下列情况下:

  • 如果不更改数据库除非数据的完整负载做出。

  • 如果表和索引被分段并且新索引数据被加载到对应于新表段的新索引段中。