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 ;//关闭监控
end:1疑难杂症:
end2、索引的相关hint用法:
select /*+index(t,idx_id_type)*/ * from t //使用t表的idx_id_type索引。