1: 经常性的delete /update 可以 alter index ........  rebuild
2: 如果因为这个原因导致速度问题,则需要,但设计合理的系统,应该不容易出这个问题(这就看对数据库本身的理解了)
3:所谓碎片,无非是由于 extent的大小不一致所造成的,这样释放出来的可能不能被重新分配,而  local 的是整个表空间统一的extent

解决方案 »

  1.   

    这是一个很好的论坛,希望能出现不同的声音!!!(1)“经常性的delete /update 可以 alter index ........  rebuild”
         我不同意这样的说法,定期重建索引是个误解,请参阅如下三篇文章
    http://asktom.oracle.com/pls/ask/f?p=4950:8:1772642::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:2913600659112,%7Brebuild%7D
    http://asktom.oracle.com/pls/ask/f?p=4950:8:1772642::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:6601312252730,%7Brebuild%7D
    http://asktom.oracle.com/pls/ask/f?p=4950:8:1772642::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:2290062993260,%7Brebuild%7D(2)对待索引重建,对于B树索引和位图索引应该报怎么不同的态度?为什么?
    (3)”但设计合理的系统,应该不容易出这个问题“,我比较赞同,但理解不深请明示一下为了避免这个问题,大体应该注意哪些方面?
    (4)我觉得碎片不应该只是由于 extent的大小不一致所造成的,大家怎么认为?
      

  2.   

    关于一切的说明
    你可以引tom的说法 :)我从来没有说一定要rebuild索引
    经常性的delete /update 可以 alter index ........  rebuild”
    可以这么做,     
    rebuild索引的时候可能需要更多的temp空间来过度存储针对不同的情况解决不同的问题
    你要明白update索引字段和delete带来的影响到底是什么
    insert会带来什么影响?
    1:delete后的空间,如果新的insert进来的数据和原来的一样,则会复用以前的空间。update对于索引来说是一个delete再insert的过程。你要明白如果你总是删除一些值然后插入不同的值,那么会造成索引的空间的浪费和索引的时候的不必要的IO代价.如果这个影响在你的应用中用户已经能高手到,那么在可能的情况下应该重新建立我不用再看tom的文章也能大致知道他会从哪几个角度来阐述
    问题是,我们要的不是完美,而是在不同具体情况下的不同解决办法重建跟b-tree/bitmap 我倒没有太仔细的考究过。但我认为关键的应该是明白什么时候适合bitmap什么时候适合使用b-tree,他们的特点分别是什么,有什么可能的缺陷3:extent/pctused/freelists/freelists group /pctincrease/initial这些参数是需要弄透的
    然后就是表的数据和将可能是怎样的变化,是否可能空间太离散?4:对于tablespace来说碎片就是由于extent的不一致造成的
    如果你要说对象内部(段内部),那和pctused/delete等有关
    以及最好还要考虑 行迁移和行连接 等情况
      

  3.   

    感谢biti_rainy精辟的论述
    感谢luckysxn的参与
    预祝你们新年快乐!!!大家还有想发表意见的吗?