oracle 基于索引优化

1、user_ind_statistics表:索引统计信息表

  Oracle中有三种类型的对象统计信息:表统计、列统计和索引统计。而在每种类型中,有细分为:表或索引级别的统计、分区级别统计和子分区级别的统计,后面两种只有在对象被分区和具有子分区的情况下才可用。

  user_ind_statistics的blevel字段为0表示索引仅有叶子块,高度为1 。高度低有利于索引范围扫描

2、索引可优化count,sum,avg,切记不存储null,一可以设置该列为非空,也可以把sql改成:select count(*) from t where object_id is not null 。当然主键就无须定义列是否允许为空了。

3、索引可优化排序。新增索引后, Oracle 就有可能利用索可本身就有序的特点来避免排序。

4、组合索引的选择:

  适合单列查询返回多,组合查询返回少的场景。

  组合查询的组合顺序,要考虑单独的前缀查询。

  仅等值无范围查询时,组合的顺序不影响性能。

  组合索引最佳顺序一般是将等值查询的列置前。

  组合索引一般不宜过多,如果组合索引列达到4个以上 ,那这个索引本身就很大, 就不一定高效。另外更新也会出现比较大的性能问题。

5、索引扫描类型的分类与构造

  index range scan            (select * f rorn t where object_id =8;)

  index unique scan          (create unique index)

  index full scan           (select * f rorn t order by object_id ;)

  index fast full scan(min/max)       (select max(object_id) from t5)

  index skip scan         

 6、同时取最大值和最小值的改法

  select max(object_id) , min(object_id) from t5;

  select max, min from (select max(object_id) max from t5 ) a , (select min(object_id) min from t5 ) b;

7、索引失效的原因:

  索引逻辑失效:索引返回大量数据,不如用全表扫描。

         发生索引列的类型转换。

            对索引进行各种运算。

   物理索引失效:(查看方式:select distinct status from user_indexes)

          long 列调整导致索引失效

          move 操作会导致索引失效

          分区表导致索引失效的操作(增加 update gl obal indexes ,全局索引不会失效。) drop,split,exchange都会导致索引失效 

          add分区不会导致索引失效

8、查看系统从为用到过的索引:

    create index idx_object_id on t5(object_type);

    alter index idx_object_id monitoring usage;//打开监控

    select count(*) from t5 where object_type='YHQTEST' select * from v$object_usage ;

    alter index idx_object_id nomonitoring usage ;//关闭监控

9、

          

             

end:1疑难杂症:

 

end2、索引的相关hint用法:

  select /*+index(t,idx_id_type)*/   * from t       //使用t表的idx_id_type索引。

  

猜你喜欢

转载自www.cnblogs.com/yaohuiqin/p/11655821.html
今日推荐