Truncate Table后,会自动释放表及其索引占的空间

解决方案 »

  1.   

    那delete后,用alter index index_name rebuild收回空间的效率呢?
      

  2.   

    delete以后index也会自动更新,但是不释放空间(和table的情况一样)。
    alter index index_name rebuild其实是先drop index然后再重建,所以能回收空间。所以trancate效率最高,如果一定要用delete,那建议先drop或者disable index,delete records以后再rebuild,那样效率也比直接从表中delete效率高。
      

  3.   

    delete以后index也会自动更新,但是不释放空间(和table的情况一样)。
    alter index index_name rebuild其实是先drop index然后再重建,所以能回收空间。所以trancate效率最高,如果一定要用delete,那建议先drop或者disable index,delete records以后再rebuild,那样效率也比直接从表中delete效率高。
      

  4.   

    delete以后index也会自动更新,但是不释放空间(和table的情况一样)。
    alter index index_name rebuild其实是先drop index然后再重建,所以能回收空间。所以trancate效率最高,如果一定要用delete,那建议先drop或者disable index,delete records以后再rebuild,那样效率也比直接从表中delete效率高。
      

  5.   

    It would be ok anyway if you use 
    alter index index_name rebuild .  It will reclaim the space .
      

  6.   

    这个问题是和上次你说的HouseKeeping 有关的。我必须用delete。
    由于表中记录比较多,但是删除的只是其中一部分数据。如果使用Drop index,然后再rebuild,会去处理那些并不需要改动的记录。有什么比较好的办法吗?
      

  7.   

    我用alter index index_name rebuild 之后,然后察看表空间的使用率,发现空间并没有怎么变化。为什么呢?
      

  8.   

    那只能先delete再rebuild,否则delete的时候会非常慢。不过你的数据库真的非常大,恐怕用常用的方法不大容易获得好的性能。你尝试过partition吗?
      

  9.   

    对partition不太懂,所以没用。
    我的数据库就其中一个表非常大,一个月会有5000万条数据,其他的表都不超过100万。所以我单独为最大的表建了一个表空间,用多个数据文件(CPU个数的倍数,放在不同的磁盘上),其它的表放在另外一个表空间上。分区真的能产生很明显的效果吗?
      

  10.   

    理论上是,我是刚开始学。
    不过我觉得很好的SQL语句也能提高不少
      

  11.   

    数据量大了以后,再好的sql语句也没办法:(
      

  12.   

    分区的功能是ORACLE针对大数据量提出的一个解决方法.
    但只在ORACLE8以上的企业版中提供.
    做了分区表后数据的查询速度会有很大的提高,同时对数据的管理例如:删除,导入,导出也很方便.建议试试.