暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle SQL优化之索引技术 --如何建立最佳索引

Oracle优化大师 2018-05-31
703


        


        众所周知;Oracle 索引在SQL 解析发挥重要的作用。而索引的创建门道很多;

        今天我们就聊聊 Oracle的索引技术;


一>  怎样建立最佳索引


1、明确地创建索引


create index index_name on table_name(field_name)


tablespace tablespace_name


pctfree 5


initrans 2


maxtrans 255


storage


(


minextents 1


maxextents 16382


pctincrease 0


);


 

2、创建基于函数的索引


常用与UPPER、LOWER、TO_CHAR(date)等函数分类上,例:


create index idx_func on emp(UPPER(ename)) tablespace tablespace_name;


3、创建位图索引


对基数较小,且基数相对稳定的列建立索引时,首先应该考虑位图索引,例:


create bitmap index idx_bitm on class (classno) tablespace tablespace_name;


4、明确地创建唯一索引


可以用create unique index语句来创建唯一索引,例:


create unique index dept_unique_idx on dept(dept_no) tablespace idx_1;


5、创建与约束相关的索引


可以用using index字句,为与unique和primary key约束相关的索引,例:


alter table table_name


add constraint PK_primary_keyname primary key(field_name)


using index tablespace tablespace_name;


二>   如何创建局部区索引



1)基础表必须是分区表


2)分区数量与基础表相同


3)每个索引分区的子分区数量与相应的基础表分区相同


4)基础表的自分区中的行的索引项,被存储在该索引的相应的自分区中,例如


create index TG_CDR04_SERV_ID_IDX on TG_CDR04(SERV_ID)


Pctfree 5


Tablespace TBS_AK01_IDX


Storage(


MaxExtents 32768


PctIncrease 0


FreeLists 1


FreeList Groups 1


)


local


/


 


如何创建范围分区的全局索引?


基础表可以是全局表和分区表


create index idx_start_date on tg_cdr01(start_date)


global partition by range(start_date)


(partition p01_idx vlaues less than ('0106')


partition p01_idx vlaues less than ('0111')


...


partition p01_idx vlaues less than ('0401'))


/


三>   如何重建现存的索引


重建现存的索引的当前时刻不会影响查询


重建索引可以删除额外的数据块


提高索引查询效率


alter index idx_name rebuild nologging;


对于分区索引


alter index idx_name rebuild partition partition_name nologging;


四>    删除索引的原因


1)不再需要的索引


2)索引没有针对其相关的表所发布的查询提供所期望的性能改善


3)应用没有用该索引来查询数据


4)该索引无效,必须在重建之前删除该索引


5)该索引已经变的太碎了,必须在重建之前删除该索引


语句:


drop index idx_name;


drop index idx_name partition partition_name;


五>   建立索引的代价


基础表维护时,系统要同时维护索引,不合理的索引将严重影响系统资源,


主要表现在CPU和I/O上。


插入、更新、删除数据产生大量db file sequential read锁等待。




下期更精彩;






本文分享自微信公众号 - Oracle优化大师,如有侵权,请联系 service001@enmotech.com 删除。
最后修改时间:2019-12-20 10:51:40
文章转载自Oracle优化大师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论