科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Oracle数据库优化之索引原理篇(2)

Oracle数据库优化之索引原理篇(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Oracle提供了大量索引选项。知道在给定条件下使用哪个选项对于一个应用程序的性能来说非常重要。一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程终止。而如果做出正确的选择,则可以合理使用资源

作者:IT实验室 来源:IT实验室 2007年9月5日

关键字: 索引 优化 数据库 ORACLE

  • 评论
  • 分享微博
  • 分享邮件

4.4 比较不匹配的数据类型:

比较不匹配的数据类型也是比较难于发现的性能问题之一。

注意下面查询的例子,account_number是一个VARCHAR2类型,在account_number字段上有索引。下面的语句将执行全表扫描。

select bank_name,address,city,state,zip
from  banks
where account_number = 990354;

Oracle可以自动把where子句变成to_number(account_number)=990354,这样就限制了索引的使用,改成下面的查询就可以使用索引:

select bank_name,address,city,state,zip
from  banks
where account_number ='990354';

特别注意:不匹配的数据类型之间比较会让Oracle自动限制索引的使用,即便对这个查询执行Explain Plan也不能让您明白为什么做了一次“全表扫描”。

5、选择性:

使用USER_INDEXES视图,该视图中显示了一个distinct_keys列。比较一下唯一键的数量和表中的行数,就可以判断索引的选择性。选择性越高,索引返回的数据就越少。

6、群集因子(Clustering Factor):

Clustering Factor位于USER_INDEXES视图中。该列反映了数据相对于已索引的列是否显得有序。如果Clustering Factor列的值接近于索引中的树叶块(leaf block)的数目,表中的数据就越有序。如果它的值接近于表中的行数,则表中的数据就不是很有序。

7、二元高度(Binary height):

索引的二元高度对把ROWID返回给用户进程时所要求的I/O量起到关键作用。在对一个索引进行分析后,可以通过查询DBA_INDEXES的B-level列查看它的二元高度。二元高度主要随着表的大小以及被索引的列中值的范围的狭窄程度而变化。索引上如果有大量被删除的行,它的二元高度也会增加。更新索引列也类似于删除操作,因为它增加了已删除键的数目。重建索引可能会降低二元高度。

8、快速全局扫描:

在Oracle7.3后就可以使用快速全局扫描(Fast Full Scan)这个选项。这个选项允许Oracle执行一个全局索引扫描操作。快速全局扫描读取B-树索引上所有树叶块。初始化文件中的DB_FILE_MULTIBLOCK_READ_COUNT参数可以控制同时被读取的块的数目。

9、跳跃式扫描:

从Oracle9i开始,索引跳跃式扫描特性可以允许优化器使用组合索引,即便索引的前导列没有出现在WHERE子句中。索引跳跃式扫描比全索引扫描要快的多。下面的程序清单显示出性能的差别:

create index skip1 on emp5(job,empno);
index created.

select count(*)
from emp5
where empno=7900;

Elapsed:00:00:03.13

Execution Plan
0 SELECT STATEMENT Optimizer
=CHOOSE(Cost=4 Card=1 Bytes=5)
1 0SORT(AGGREGATE)
2 1 INDEX(FAST FULL SCAN) 
OF 'SKIP1'(NON-UNIQUE)

Statistics

6826 consistent gets
6819 physical  reads

select /*+ index(emp5 skip1)*/ count(*)
from emp5
where empno=7900;

Elapsed:00:00:00.56

Execution Plan
0 SELECT STATEMENT Optimizer
=CHOOSE(Cost=6 Card=1 Bytes=5)
1 0SORT(AGGREGATE)
2 1 INDEX(SKIP SCAN) OF 
'SKIP1'(NON-UNIQUE)

Statistics

21 consistent gets
17 physical  reads

10、索引的类型:

B-树索引 位图索引 HASH索引 索引编排表

反转键索引 基于函数的索引 分区索引 本地和全局索引

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章