关于Oracle的高水位线,大量的delete语句不会回收空间,因此导致高水位线不断增高,但我理解只有select * from table;这种无条件的全表扫描时,它的性能才受到高水位线未降低的影响,如果应用中没有这种select * from table;的操作,只是有大量的带WHERE条件的delete和insert操作,那其实可以不用管高水位线,因为delete之后的insert还会利用高水位线以下的free块,不会造成过度的free块浪费,不知道对不对呢?或者说,如果一张表没有索引,无论我用哪种WHERE条件SELECT、INSERT、UPDATE、DELETE,都是全表扫描,此时都会受到高水位线的影响,不是仅仅指SELECT * FROM TABLE;的情况?因为是这样,建索引有问题,由于历史原因,建的复合索引只能帮助一部分应用,另一些应用因为SQL的条件不同可能无法用到索引,因此如果建了索引,这部分应用因DML操作还需要维护索引表,就可能比现在还慢。所以我想看看如果通过减少历史数据和降低高水位线,是否可以缓解一下。因此才产生了如上的高水位线问题。谢谢指点!索引Oracle

解决方案 »

  1.   

    其实,在大数据 的今天,也谈不上浪费了。
    若不这般操作,你有更优化的方法吗?
    oracle在覆盖原被删除的空间,(有自己的管理机制)
      

  2.   

    1、如果没索引,select,update,delete都会走FTS;
    2、走fts比系统维护索引大开销要大的多;
    3、如果数据量很大,海量的话,可以考虑分区;
    4、可以采取方式降低hwm;