动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息



本月文章推荐
.详细讲述Oracle中的to_date参数含.
.查询primary key和forgen key的关.
.Oracle SQL的优化(5)---关于rown.
.Oracle数据库如何查询记录时给记.
.Oracle 8.1.6 for Win2000 系统文.
.RedHat系统下实现个人主页空间服.
.关于Import error ora-01658.
.oracle毛病(二).
.如何在oracle中用SQL创建临时表?.
.用 VC 开 发 Oracle 数 据 库 应.
.Oracle 10g R2特性之数据仓库和集.
.如何使用pipeline function获得实.
.包含同名触发器的表PURGE TABLE出.
.ora-01034错误解决方法及详细分析.
.PL/SQL的异常.
.快速导出导入expdp/impdp的停止与.
.Oracle数据库空间的使用和管理若.
.TestKing Oracle 1z0-040 V1.
.用java实现ORACLE数据库的文件上.
.Oracle网格计算中文资料—企业管.

Oracle数据库经典优化之索引原理篇

发表日期:2008-2-9 |


Oracle提供了大量索引选项。知道在给定条件下使用哪个选项对于一个应用程序的性能来说非常重要。一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程终止。而假如做出正确的选择,则可以合理使用资源,使那些已经运行了几个小时甚至几天的进程在几分钟得以完成,这样会使您马上成为一位英雄。这篇文章就将简单的讨论每个索引选项。主要有以下内容: 1、基本的索引概念: 查询DBA_INDEXES视图可得到表中所有索引的列表,注重只能通过USER_INDEXES的方法来检索模式(schema)的索引。访问USER_IND_COLUMNS视图可得到一个给定表中被索引的特定列。 2、组合索引: 当某个索引包含有多个已索引的列时,称这个索引为组合(concatented)索引。在 Oracle9i引入跳跃式扫描的索引访问方法之前,查询只能在有限条件下使用该索引。比如:表emp有一个组合索引键,该索引包含了empno、ename和deptno。在Oracle9i之前除非在where之句中对第一列(empno)指定一个值,否则就不能使用这个索引键进行一次范围扫描。 非凡注重:在Oracle9i之前,只有在使用到索引的前导索引时才可以使用组合索引! 3、Oracle ROWID: 通过每个行的ROWID,索引Oracle提供了访问单行数据的能力。ROWID其实就是直接指向单独行的线路图。假如想检查重复值或是其他对ROWID本身的引用,可以在任何表中使用和指定rowid列。 4、限制索引: 限制索引是一些没有经验的开发人员经常犯的错误之一。在SQL中有很多陷阱会使一些索引无法使用。下面讨论一些常见的问题: 4.1 使用不等于操作符(<>、!=): 下面的查询即使在cust_rating列有一个索引,查询语句仍然执行一次全表扫描。
select cust_Id,cust_name from  customers where cust_rating <> 'aa';
把上面的语句改成如下的查询语句,这样,在采用基于规则的优化器而不是基于代价的优化器(更智能)时,将会使用索引。
select cust_Id,cust_name from  customers where cust_rating < 'aa' or cust_rating > 'aa';
非凡注重:通过把不等于操作符改成OR条件,就可以使用索引,以避免全表扫描。 4.2 使用IS NULL 或IS NOT NULL: 使用IS NULL 或IS NOT NULL同样会限制索引的使用。因为NULL值并没有被定义。在SQL语句中使用NULL会有很多的麻烦。因此建议开 发人员在建表时,把需要索引的列设成NOT NULL。假如被索引的列在某些行中存在NULL值,就不会使用这个索引(除非索引是一个位图索引,关于位图索引在稍后在具体讨论)。 4.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.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索引 索引编排表 反转键索引 基于函数的索引 分区索引 本地和全局索引

上一篇:Oracle在Linux操作系统下的安装小结 人气:367
下一篇:如何监控Oracle索引的使用完全解析 人气:760
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号