在创建索引之后,除非您保持索引紧凑并且组织有序,否则性能会随着时间推移而下降。
创建索引时,指定 MINPCTUSED 子句。必要时,删除并重新创建现有的索引。
执行落实后,可以从表中实际地除去被标记为“已删除”的索引键。将所要删除的键标记为“已删除”之后,对表的 X 锁定将允许实际地删除这些键。
为了允许在重组期间对索引进行读写访问,请使用带有 ALLOW WRITE ACCESS 选项的 REORG INDEXES 命令。
对于 DB2® V9.7 FP1 及更高版本的发行版,对数据分区表发出带有 ON DATA PARTITION 参数的 REORG INDEXES 命令,以重组所指定分区的分区索引。在重组索引期间,不受影响的分区将保持可读,而只有受影响的分区才可写。
ADMIN_GET_INDEX_INFO 函数的 RECLAIMABLE_SPACE 输出显示可回收的空间量(以千字节计)。
在插入键期间,将清除被标记为“已删除”以及确定已落实的键(如果这样可以避免需要执行页分割并防止索引增大的话)。
在删除键期间,如果某页中的所有键都被标记为“已删除”,那么将尝试查找另一个其中所有键都被标记为“已删除”并且所有那些删除操作都已落实的索引页。如果找到这样的页,那么会将其从索引树中删除。删除键时,如果存在对表的 X 锁定,那么将实际地删除该键,而不只是将其标记为“已删除”。在物理删除期间,如果同一页上的任何已删除的键被标记为“已删除”且已知将要落实,那么也会除去这些键。
CLEANUP PAGES 选项将搜索并释放其中的所有键都被标记为“已删除”并已知要落实的索引页。
CLEANUP ALL 选项不仅释放其中所有键都被标记为“已删除”并已知要落实的索引页,还将从包含一些未删除的记录标识 (RID) 的页中除去被标记为“已删除”并已知要落实的 RID。此选项还将尝试合并相邻叶子页,前提是合并后的叶子页中的可用空间量至少为 PCTFREE。PCTFREE 值是在创建索引时定义的。缺省 PCTFREE 值为 10%。如果可以合并两页,那么将释放其中一页。
对于数据分区表,建议您在完成异步清除索引操作之后调用 RUNSTATS 命令。要确定表中是否存在已拆离的数据分区,请查询 SYSCAT.DATAPARTITIONS 目录视图中的 STATUS 字段,然后查找值“L”(逻辑上已拆离)、“D”(具有拆离从属表(例如,具体化查询表)的已拆离分区)或“I”(清除索引)。