ITPub博客

首页 > 数据库 > 数据库开发技术 > insert append时是否要disable索引?

insert append时是否要disable索引?

原创 数据库开发技术 作者:iolia131 时间:2011-01-27 17:32:50 0 删除 编辑

如测试的那样(参见文章no logging table test中的测试),insert append插入1000万行到一个没有索引的500M的表,在没有索引时只需要10分钟,有一个索引时耗时就暴涨到1小时10分钟。那么是否可以考虑在插入前后disable/rebuild索引来加快插入速度呢?Tom说不行。

[@more@]

ASK TOM网站上的一篇文章:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1921387700346909109

TOM比较了两种做法:

·不更改索引:

insert /*+ Append */ into A select from B

Oracle会做三件事:

1、在高水位线以上插入数据。

2、在临时表空间中为新插入的数据创建mini-index structure。

3、数据插入完毕后,将mini-index与现有的索引合并。

·diable/rebuild索引

1. execute immediate 'disable A indexes'
2. insert /*+ Append */ into A select from B
3. execute immediate 'rebuild A indexes'

Oracle做两件事:

1、在高水位线以上插入数据。

2、数据插入完成后,对表做N次全表扫描——N等于索引的数量——来重建索引。

TOM建议:

·如果更改的行数几乎就是表的全部数据,可以使用disable/rebuild索引。

·如果表本身比较大,更改只是使它更大,最好不要更改索引。因为重建索引的时间会大大超过插入数据的时间。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8684388/viewspace-1045265/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-10-20

  • 博文量
    20
  • 访问量
    48658