索引的基本原理

来源:互联网 发布:vs软件下载 编辑:程序博客网 时间:2024/06/06 07:47


1.查询dba_indexes和dba_ind_columns以检索表上的索引信息,查看user_indexes和user_ind_columns可以检查当前方案的索引信息。
2.通过使用不可视索引,可以通过临时‘关闭’索引来检查查询在没有这个索引的情况下的性能,由于不可视期间索引仍被维护,因此在需要的时候打开

时非常快速的而简单的;
 alter index index_name invisible/visible;修改索引为不可视/可视
3.避免奖oracle的ROWID硬编码为特定编码,因为不同版本的ROWID结构会有所不同,而且在将来的版本里可能会有所改变。建议不要对ROWID进行硬编码


4.通过使用create index 命令的compute statistics子句,可以在一个步骤中创建并分析索引(索引的统计信息在创建的时候自动收集)。
5.对表中的列使用默认值子句,这样就可以禁止使用null值,从而消除与使用null值相关的性能问题。或者是把该列设置为not null。(单键B树索引不

存null在索引里)。
6.通过使用函数修改所比较的列值而不是列本身,就可以使用索引,在对列本身使用函数时就会抑制使用这些索引。
7.比较不匹配的数据类型可能会导致在oracle内部抑制对索引的使用,及时对查询使用explain plan,也不能解释为什么会执行全表扫描(隐式转换了数

据类型)。通常字符和数值类型的数据比较时,oracle会把字符类型的数据转换成数值类型的数据,字符和日期类型的数据比较时,oracle会把字符类型

的数据转换成日期类型的数据。
8.索引的选择性可以帮助基于成本的优化器决定一条执行路径。索引的选择性越高,返回的记录数越少。可以通过建立复合索引来提高选择性。
9.通常,数据库块越大,索引的二元高度越小(二元高度即索引的level,在user_/dba_indexes表的blevel列存储的就是二元高度)。
10.blevel中的每个额外级别都会额外增加DML的执行成本。
11.表中的数据越集中越能提高执行范围扫描类型操作语句的执行性能。可以通过集群因子知道索引是否集中(查看dba_/user_indexes表中的

clustering_factor列可以知道集群因子大小,集群因子接近表的数据块数说明数据集中,集群因子接近数据行数,说明数据很分散)。
12.如果索引中北删除的行数达到了20%-25%,重建索引可以帮助减少二元高度和在一次I/O过程中读取的空闲空间量。
13.如果表中的数据是偏斜的,直方图(高度均衡直方图:所有的桶都有相同的行数。和频率均衡直方图:每个桶的值的范围相同)可以为基于成本的优

化器提供分布图。在那些没有数据偏斜的列上使用直方图并不会提高性能,反而可能降低性能。
14.oracle 10g以前会默认为直方图产生75个桶,在10g和11g中根据oracle内部算法决定桶数,最多254个桶,收集统计信息程序包DBMS_STATS中对应的

method_opt的默认值是auto。
15.对于有组合所有的大型表来说,索引跳跃式扫描特性可以进行快速访问,即使是索引的前导列没有出现在限制条件中。跳跃式扫描会添加前导列的distinct值,然后再扫描。
16.已索引列的值存储在使用中。因此,如果查询的列都在索引(一般复合索引)中,那么直接访问这些索引,而不必从表中检索数据,同时也减少了I/O。
17.低基数的列可以使用位图索引。性别就是一个列子。
18.使用dba_/user_indexes表的index_type列可以查看时b树索引(normal)还是位图索引(bitmap)。不要在高负载的OLTP系统索引位图索引。
19.哈希索引对于一些包含比较有序的值的静态数据非常有效。在限制条件制定了确定值而不是范围值时最为有用。
20.考虑在那些经常通过在主键上指定值或范围扫描来访问数据的表使用索引组织表(用存储索引的形式存储表)。
21.磁盘数量有限,同时有大量的有序载入操作要执行,反键索引是可行的方案。
22.为了在优化器中使用基于函数的索引,必须把初始化参数query_rewrite_enabled设为true。在10g以前默认是false,10g和11g默认是true。
23.有前缀的本地索引可以帮助oracle快速的剪裁不必要的分区。如果分区没有包含在where子句中所使用的任何一个值,就可以不访问分区,这提高了语句的执行性能。
24.要创建唯一的无前缀的索引,他就必须包含分区键的子集。
25.在修改分区表时指定alter table命令的update global indexes子句,默认情况下,在改变分区表时需要重建全局索引。
26.如果一个全局索引将被对等分区,就应该把它创建为本地索引,这样oracle可以维护这个索引,病使用它来剪裁不必要的分区。
27.使用位图链接索引来改进数据仓库环境中链接的性能。
28.在alter index 语句中使用rebuild选项可以使用已有索引而不是表来快速重建索引。
29.可以重建索引时使用rebuild online选项,以允许对表或分区同时进行DML操作。但不能在位图索引和那些强制关联完整性约束的索引上指定rebuild online选项。这个选项在11g中改进了很多,性能也提高了很多。

1 0