Oracle的索引总结

[code]

1. 索引与日志

2. 索引的类型
* B-树索引:几乎所有的关系型数据库中都有b*tree类型索引,也是被最多使用的。其树结构与二叉树比较类似,根据rid快速定位所访问的行。
* 反转键索引:反转了b*tree索引码中的字节,是索引条目分配更均匀,多用于并行服务器环境下,用于减少索引叶的竞争。
* 降序索引:8i中新出现的索引类型,针对逆向排序的查询。
* 位图索引:使用位图来管理与数据行的对应关系,多用于OLAP系统。
* 基于函数的索引:这种索引中保存了数据列基于function返回的值,在select * from table where function(column)=value这种类型的语句中起作用。
* HASH索引
* 索引编排表
* 分区索引
* 本地和全局索引
3. 创建索引的原则
1. 需要平衡query合DML的需要,常用于(子)查询的表应建立索引;
2. 把索引建到不同的表空间中;
3. 用统一的extent大小: 五个block的倍数或者tablespace指定的MINIMUM EXTENT的倍数;
4. 创建索引考虑用NOLOGGING参数,重建索引的时候也一样;
5. 创建索引时INITRANS值应该比相应的table的值高一些;
6. 对常用SQL语句的where条件中的列建立唯一索引或组合索引,组合条件查询中相应的组合索引更有效;
7. 对于组合索引,根据列的唯一值概率,安排索引顺序;
8. 如果一个列具有很低的数据基数,并且或者可具有空值,不应作为索引列;
9. 如果where语句中不得不对查询列采用函数查询,如upper函数,最好建立相应函数索引;
10. 对于低基数集的列,并包含OR等逻辑运算,考虑用Bitmap索引,对于从大量行的表中返回大量的行时也可以考虑Bitmap索引;
11. 避免在有大量并发DML运算的表中使用 Bitmap索引;
12. 能用唯一索引,一定用唯一索引
13. 能加非空,就加非空约束
14. 一定要统计表的信息,索引的信息,柱状图的信息。
15. 联合索引的顺序不同,影响索引的选择,尽量将值少的放在前面
16. 索引不是越多越好,特别是大量从来或者几乎不用的索引,对系统只有损害。OLTP系统每表超过5个索引即会降低性能。
17. 很多时候,单列索引不如复合索引有效率。
18. 用于多表连结的字段,加上索引会很有作用。
19.
4. 常用命令
1. 创建索引
create [unique] index 索引名 on table 表名(列名1,列名2……) where 条件;
2. 释放多余空间
alter index 索引名 deallocate unused;
3. 重建索引
alter index 索引名 rebuild;
4. 删除索引
drop index 索引名
5. 显示表的所有索引
select index_name,index_type,uniqueness from dba_indexes where owner = “user” and table_name=”table_name”;
6. 显示索引列
select column_name,column_position,column_length from dba_ind_columns where index_owner = “user” and index_name= “”;
5. 其他
[/code]