ORACLE高级课程-怎样选择索引

一、怎样选择索引(8建议)

1.由于唯一索引扫描效率最高,因此能使用唯一索引,尽量使用唯一索引;

2.对于取值基数较少的字段,如性别、状态、Check项,尽量使用位图索引;
3.由于NULL值在索引中没有定义,因此建议尽量不要在允许NULL值的列上建立索引,虽然Oracle宣称在允许NULL值的列上位图索引,也是有效的,但我们依然强烈建议可以将null指定为一个默认的值后再建立索引;
4.根据实际情况,一般对于列不超过10个,数据不超过1万行的表不要建立索引,此种情况在应用中往往能占40%以上;
5.一个表中不是建立的索引越多越好,相反过多的索引可能影响整体的性能,至少影响INSERT、DELETE和UPDATE的性能;
6.对于查询中的WHERE子句经常需要使用多个AND条件一起使用时,应建立联合索引,一般情况下,此种联合索引是标示一行唯一记录的,而主键使用代理主键,并且尽量将值少的列放在前面;
7.对于多表联合查询,及表连接的问题,对于连接的字段,需要建立索引;
8.平衡索引与更新的关系。如果一个大表的更新操作多于查询操作,建议可以少建立索引;如果一个大表的查询操作多于更新操作则可以考虑多使用索引。


二、何时需要重建索引

1.叶子节点中浪费的空间大于20%时

analyze index IDX_ACCOUNT_TRADE_YHKH validate structure;
select a.name,(a.del_lf_rows_len/a.lf_rows_len) * 100 from  index_stats a
 其中del_lf_rows_len是叶子节点中被删除的行数; lf_rows_len是叶子节点的行数
alter index IDX_ACCOUNT_TRADE_YHKH rebuild或者删除该索引再创建

2.监视索引的使用情况,对从来没使用的索引进行删除

v$object_usage


三、查询出所有的用户表
1、查询出用户所有表的索引
select * from user_indexes
2、查询用户表的索引(非聚集索引):
select * from user_indexes where uniqueness='NONUNIQUE'
3、查询用户表的主键(聚集索引):
select * from user_indexes where uniqueness='UNIQUE'
4、查询表的索引
select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and
t.table_name='NODE'
5.查询一个用户中存在的过程和函数
select object_name,created,status from user_objects 
where lower(object_type) in ('procedure','function');
6.查询其它角色表的权限
select * from role_tab_privs ;  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值