test7

当在一个有大量记录的表上创建索引时这个时间可能会很长,我做了一个实验,在SUN的工作站上对一个有八百多万行的表创建索引要20分钟左右。
SQL>set timing on
SQL> create index ind_sub_obj on subscribeinfo(OBJECTID);
Index created.
Elapsed: 00:20:44.50

那么有什么办法来加速索引的创建呢?索引的创建过程实质是一个创建B+树的过程,这个过程中一个重要的阶段就是做排序操作,
如果我们把更多的排序过程放在内存中完成会大大地加速索引的创建。
下面的例子通过调整数据库的pga_aggregate_target参数来达到加速索引创建的过程。

SQL> alter system set pga_aggregate_target =100000000;
System altered.

SQL> create index ind_sub_obj on subscribeinfo(OBJECTID);
Index created.
Elapsed: 00:09:20.91

上述操作的时间由20分钟变为9分钟,大家应该欣喜若狂了吧,但还可能做得更快些。
Oracle的默认规则是所有对数据块的改变都会记录到日志中,如果我们不使用这个规则将可以更快一些。
下面的例子用nologging选项告诉oracle不要写日志,这个时间由9分钟减到了6分钟。
SQL> create index ind_sub_obj on subscribeinfo(OBJECTID) nologging;
Index created.
Elapsed: 00:06:40.16

是不是还可以快些呢?当然可以,如果一个机器上有多个CPU的话,这个操作将进一步加速,具体的SQL如下
--n为cpu的个数
create index ind_sub_obj on subscribeinfo(OBJECTID) nologging
parallel (degree n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值