大表建立索引注意事项:
- 表空间和磁盘空间是否足够
- 表在建立索引的时候会进行加锁操作,所以建立索引应在业务空闲的时候进行。
性能调整方面注意事项:
- 物理上,应当尽量把索引与数据分散到不同的磁盘上
- 逻辑上,数据表空间和索引表空间应该分开
- 调整排序区的大小:建立索引的时候对数据进行大量的排序操作,需要调整排序区的大小。9i之后,如果初始化参数workarea_size_policy的值设置为true,则排序区从pga_aggregate_traget里自动分配获得。
- 建立索引的时候,可以加上nologging选项,减少在建立索引过程总产生的大量redo,从而提高执行速度。
- 让尽量可能多的源表进入buffer cache,使用cache和full hint对源表作FTS,让它尽可能的出现在LRU的MRU一端。
例子:
>alter session set db_file_multiblock_read_count = 128;
注:
- 初始化参数db_file_multiblock_read_count影响oracle在执行全表扫描时一次读取的block的数量;
- db_file_multiblock_read_count的设置要受OS最大IO能力影响,也就是说,如果你系统的硬件IO能力有限,即使设置再大的db_file_multiblock_read_count也是没有用的。目前Oracle所支持的最大db_file_multiblock_read_count 值为128.
- 在Oracle10gR2之后的版本(10gR2和11g)中,Oracle数据库已经可以根据系统的IO能力以及Buffer Cache的大小来动态调整该参数值,Oracle建议不要显式设置该参数值。
- >show parameter multi (系统值为73)
>select /*+ cache(t) full(t) */ count(*) from scott.t;
>alter session set sort_area_size = 104857600;
>create index ind_t on scott.t(id) tablespace users
pctfree 5 initrans 4 maxtrans 255 nologging storage(initial 104857600) parallel 4 online;
>alter index ind_t logging;
>alter index ind_t parallel 1;
>alter session set db_file_multiblock_read_count = 16;