木匠的微型博客 Charlie Twitter

    follow me on Twitter

    Thursday, March 05, 2009

    Index space management索引空间管理

    这回咱先问个问题, 啥时候数据库自动回收索引的空闲空间?

    这里是我昨天学到的索引空间管理知识:

    一个UPDATE语句,对索引来说,就是一个DELETE和一个INSERT,删掉旧键值,插入新键值.
    如果是唯一索引(unique index),删掉旧键值的空槽位可以被同一个事务里面接下来的操作重用.
    如果不是唯一索引(unique index),删掉旧键值的空槽位,只有在事务提交以后,才可以被重用.
    索引段上,只有INSERT和DELETE操作.

    如果删除了大部分数据,再没有新的数据插入,用alter index coalesce;释放可重用的空间. coalesce应该不会锁住表,我需要进一步确认.

    参考
    ----
    Oracle® Database SQL Language Reference
    11g Release 1 (11.1)

    ALTER INDEX ... SHRINK SPACE COMPACT 等价于 ALTER INDEX ... COALESCE.

    How does insert and delete use space regarding to indexes?

    查看索引空间: SQL>exec segment_space_a(P_SEGNAME=>'INDEX_Name',p_type=>'INDEX');

    No comments: