orcle 索引的运用

2.4.3.1、 索引的定义

 

    数据库中的目录与书籍被之目类似,在一如既往本书中,利用索引可以快搜索所急需信息,

永不看整本书。在数据库中,索引使数据库程序无须对普表进行扫描,

就算得当里面找到所急需数。书被的目录是一个词语列表,其中注明了富含各个词的页

如若数据库被的目录是某个表中一致列或者多列值的汇聚和呼应的指向表中物理标识这些价值的数据页

的逻辑指针清单。

 

2.4.3.2、索引的意:

 

1.由此创设唯一索引,可以保证数据记录的唯一性。

 

2.可大大加速数据检索速度。

 

3.方可加速表与申内的接连,这无异碰于贯彻数据的参考完整性方面产生特意的意思。

4.每当行使ORDER BY和GROUP BY子句被进行搜索数据经常,可以肯定减少查询中分组和排序的时日。

 

5.采用索引可以于查找数据的长河中使用优化隐藏器,提高系统特性。

2.4.3.3、索引的归类

1.单列索引与复合索引
 一个目录可以由一个或者多个列成,用来创造索引的排列于称“索引列”。
 单列索引是冲单列所创的目录,复合索引是根据两排或者基本上排所创建的目录。
2.唯一索引同非唯一索引
 唯一索引是寻觅引列值不能够再次的目录,非唯一索引是找引列可以再次的目录。
 无论是唯一索引还是非唯一索引,索引列都兴取NULL值。默认情况下,Oracle创建的目是勿唯索引。
3.B树索引
 B树索引是依照B树算法组织现有放索引数据的,所以B树索引主要依靠其组织现有放索引数据的算法来促成快捷搜索功能。
4.位图索引
 位图索引在多排查询时,可以本着片单列上的位图进行AND和OR操作,达到更好之查询功能。
5.函数索引
 Oracle中不仅能直接指向表中的列创建索引,还可针对含有列的函数或表达式创建索引,这种索引称为“位图索引”。

2.4.3.4寻觅引的采用

可场合

1.主键;

2.唯一键;

3.外键;

4.时索要排序的字段;

5.分组排序的字段;

6.经常作为查询条件的字段;

 

应该建索引列的特点

1)在不时索要寻找的排列上,可以加快搜索的速;
2)在作为主键的排上,强制该列的唯一性和团队表中数据的排列结构;
3)在时用当连年的排上,这些列第一是局部外键,可以加速连接的进度;

4)在不时要根据范围开展搜的列上创建索引,因为索引已经排序,其指定的范围    是接连的;
5)在时时要排序的列上创建索引,因为索引已经排序,这样查询好下索引的排序,加快排序查询时;
6)在经常用于WHERE子句被之排上面创建索引,加快规范的判断速度。

 

莫入场合

1)对于那些当询问中很少使用或者参考的排非应有创建索引。这是因,既然这些列好少动及,因此有索引或者无索引,并无能够增强查询速度。相反,由于长了目录,反而 降低了网的护卫速度和叠加了半空中需求。
2)对于那些单纯发生大少数据值的排列也非应当长索引。这是以,由于这些列的取值很少,例如人事表的性列,在查询的结果受到,结果集的数行占了说明中数据行的坏要命比重,即需要以说明中摸索的数据行的比例非常挺。增加索引,并无可知明确加快检索速度。
3)对于那些定义也blob数据类型的排列不该增加索引。这是盖,这些列的数据量要么相当深,要么取值很少。
4)当修改性能远远高于检索性能时,不应当创建索引。这是为,修改性能和搜索性能是互相矛盾的。当多索引时,会提高检索性能,但是会落修改性能。当减少索引时,会增进修改性能,降低检索性能。因此,当修改性能远远盖检索性能时,不应有创建索引。(数据量庞大,考虑创建分区索引)

2.4.3.5、索引查询原理

目录是多少数据行的要字之列表,查询数据时,通过索引中之关键字可以快速稳定到如看的笔录所当的数据块,从而大大减少读取数据块的I/O次数,因此可以明显加强性。

2.4.3.6、sql语句

目的创始语法

CREATE    UNIUQE | BITMAP   INDEX <schema>.<index_name>
ON  <schema>.<table_name>

(<column_name> | <expression> ASC | DESC,
<column_name> | <expression> ASC | DESC,…)
TABLESPACE <tablespace_name>
STORAGE <storage_settings>
LOGGING | NOLOGGING
COMPUTE STATISTICS
NOCOMPRESS | COMPRESS<nn>
NOSORT | REVERSE
PARTITION | GLOBAL PARTITION<partition_setting>

连带认证
1) UNIQUE |
BITMAP:指定 UNIQUE为唯一值索引, BITMAP为各项图索引,省略为 B-Tree索引。
2) <column_name> |<expression> ASC |
DESC:可以对多列进行共同索引,当为
expression 时即使―基于函数的目录
3) TABLESPACE:指定存放索引的表空间(索引与原表不在一个发明空间时效率更胜)
4) STORAGE:可更设置表空间的囤参数
5) LOGGING |
NOLOGGING:是否对索引发生重复开日志(对大表尽量用 NOLOGGING
来压缩占用空间并提高效率)
6) COMPUTESTATISTICS:创建新索引时收集统计信息
7) NOCOMPRESS |
COMPRESS<nn>:是否采用―键压缩‖(使用键压缩可以去除一个键列
蒙冒出的重复值)
8) NOSORT |
REVERSE: NOSORT 代表与表中相同之依次创建索引, REVERSE表示相
倒顺序存储索引值
9) PARTITION |
NOPARTITION:可以以细分区表和非分区表上针对创建的目录进行分区

 

2.4.3.6、索引使用误区

1.施用未对等操作符( <>、 !=)

  下面的查询即使以cust_rating列有一个索引,查询语句仍然实行同一不成全表扫描。
    select cust_Id,cust_name from customers
wherecust_rating<> ‘aa’;
   将地方的语词改成为如下的查询语句,这样,在利用基于规则的优化器而休是冲代价的优化器(更智能)时,将会使索引。
   select cust_Id,cust_name fromcustomers where cust_rating<‘aa’
orcust_rating > ‘aa’;

特别注意:通过把不抵操作符改化OR条件,就可应用索引,以避免全表扫描。

2、 使用 IS NULL或 IS NOT NULL

应用ISNULL或ISNOT NULL同样会限制索引的利用。因为NULL值并不曾叫定义。
于 SQL语句被以NULL会来成千上万之分神。因此建议开发人员在建表时,把用索引的列设成NOT
NULL。如果被索引的排列于一些行吃在NULL值,就无见面采用此目录(除非索引是一个各项图索引,关于各项图索引在稍后在详细座谈)。

3、使用函数

万一不下基于函数的目录,那么在 SQL语句之 WHERE子句被针对有索引的排列下函数时,会使优化器忽略掉这些索引。 下面的询问不会见动用索引(只要她不是冲函数的目录)
select empno,ename,deptno from emp where trunc(hiredate)=’01-MAY-81′;
把上面的语句改化下面的言语,这样就算好透过索引进行查找。
select empno,ename,deptno from emp
where hiredate<(to_date(’01-MAY-81′)+0.9999);

4、比较不兼容的数据类型

啊是比较为难让觉察的性能问题之一。
注意下面查询的例证,account_number是一个VARCHAR2类型,在account_number字段上生目录。
下面的言语以履行全表扫描:
select bank_name,address,city,state,zip from banks whereaccount_number
= 990354;
Oracle 可以自动将 where子句变成to_number(account_number)=990354,这样就限
制裁了目录的下,改成为下面的询问就足以用索引:
select bank_name,address,city,state,zip from banks where
account_number=’990354′;
特别注意: 不匹配的数据类型之间比较会让oracle自行限制索引的施用,即便对这查询执行ExplainPlan也非克于你明白怎么开了同样差―全表扫描。

5、查询索引

查 询 DBA_INDEXES视 图 可 得 到 表 中 所 有 索 引 的 列表 , 注 意 只 能 通 过USER_INDEXES的措施来搜寻模式(schema)的目录。访问 USER_IND_COLUMNS视图可收获一个于定表中吃索引的特定列。

6、 组合索引

当有索引包含有多独已索引的排时,称这目录为组合(concatented)索引。在Oracle9i引入跳跃式扫描的目访问方法之前,查询只能当少数条件下行使该索引。比如:表 emp 有一个组合索引键,该索引包含了empno、 ename和 deptno。在Oracle9i之前只有在 where之词被针对第一列(empno)指定一个值,否则就算不能够运用这索引键进行同样浅克扫描。
特别注意:在Oracle9i之前,只有在行使到目录的前导索引时才得以行使组合索引

相关文章