oracle 大数量删除
程序员文章站
2022-05-18 16:41:44
...
ORACLE采用的是不完全B+树,就是在删除时不进行再平衡。
就是说,大量修改和删除后,性能会下降,有时会错,必须经常修理索引。
目前采用完全b+树的数据库只有INFORMIX。
他们都担心删除时平衡会影响效率。实际上完全多虑了,INFORMIX按索引删除,比其他数据库快得多。
在经过大数据删除后,执行select pk from table where pk < 1亿之类的语句后,即使没有查询到任何数据,执行也是比较的慢, 原因就是没有再平衡, 或者如下解释:产生了索引碎块
尽管被删除的索引条目所占用的空间大部分情况下都能够被重用,但仍然存在一些情况可能导致索引空间被浪费,并造成索引数据块很多但是索引条目很少的后果,这时该索引可以认为出现碎片
索引键值持续增加(比如采用sequence生成序列号的键值),同时对索引键值按照顺序连续删除,这时可能导致索引碎片的发生。因为前面我们知道,某个索引块中删除了部分的索引条目,只有当有键值进入该索引块时才能将空间收回。而持续增加的索引键值永远只会向插入排在前面的索引块中,因此这种索引里的空间几乎不能收回,而只有其所含的索引条目全部删除时,该索引块才能被重新利用。
对于经常大数据删除的时候,最好进行分区,然后不要的数据做整个的truncate. 对于大数据的表超过200w ,不进行分区,本身就是个错误。