日期:2014-05-16  浏览次数:20875 次

高水位线对有索引与无索引的带WHERE条件的DML操作的影响
关于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

------解决方案--------------------
其实,在大数据 的今天,也谈不上浪费了。
若不这般操作,你有更优化的方法吗?
oracle在覆盖原被删除的空间,(有自己的管理机制)
------解决方案--------------------
1、如果没索引,select,update,delete都会走FTS;
2、走fts比系统维护索引大开销要大的多;
3、如果数据量很大,海量的话,可以考虑分区;
4、可以采取方式降低hwm;