Oracle索引分析与查询优化

合集下载

数据库系统中的查询优化与索引技术研究

数据库系统中的查询优化与索引技术研究

数据库系统中的查询优化与索引技术研究导言在信息爆炸的时代,大量的数据需要有效地存储和管理。

数据库系统的发展为大规模数据管理提供了强有力的支持,而查询优化与索引技术则是数据库系统性能优化的核心。

本文将探讨数据库系统中的查询优化与索引技术,旨在深入理解其原理与应用。

一、查询优化的重要性1.1 查询优化对数据库性能的影响查询是数据库系统的核心操作之一,其性能直接影响到用户对数据库系统的使用体验。

当数据库中的数据量庞大时,执行一次查询可能需要耗费大量的时间和资源。

因此,通过优化查询过程,可以提高数据库系统的响应速度和处理能力,从而更好地支持各种应用需求。

1.2 查询优化的工作原理查询优化的主要目标是找到一种最优的查询执行计划,即最小化查询的时间和资源消耗。

在进行查询优化时,首先需要收集统计信息,包括表的大小、索引统计等。

其次,需要考虑查询的执行顺序以及使用哪些索引。

最后,通过代价估计和算法优化,选择出最佳的查询执行计划。

二、索引技术的研究与应用2.1 索引的作用与原理索引是数据库中存储数据的一种数据结构,通过在关键字段上建立索引,可以提高查询的效率。

常见的索引类型包括B树、B+树、Hash索引等。

索引的原理是利用数据结构的查询特性,使得查询过程能够快速定位目标数据,而不需要遍历整个数据集。

2.2 索引的设计与优化索引的设计是数据库系统中的一项重要工作,良好的索引设计可以明显提升查询性能。

在索引设计中,需要考虑索引的选择、索引字段的顺序等因素。

此外,在索引的使用与维护过程中,也需要进行一些优化措施,如定期重建索引、合理设置索引缓存等。

2.3 索引与数据库系统的集成索引技术在数据库系统中得到了广泛应用,几乎所有的数据库系统都支持索引功能。

在数据库系统中,索引与其他关键组件相互配合,实现高效的数据查询和更新。

索引与查询优化器、存储管理器等模块的集成,使得数据库系统能够更好地响应用户的查询需求。

三、查询优化与索引技术的研究进展3.1 查询优化与索引技术的挑战与难点查询优化与索引技术的研究面临着诸多挑战与难点。

oracle数据库性能调优

oracle数据库性能调优

oracle数据库性能调优⼀:注意WHERE⼦句中的连接顺序:ORACLE采⽤⾃下⽽上的顺序解析WHERE⼦句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最⼤数量记录的条件必须写在WHERE⼦句的末尾.尤其是“主键ID=?”这样的条件。

⼆: SELECT⼦句中避免使⽤ ‘ * ‘:ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个⼯作是通过查询数据字典完成的, 这意味着将耗费更多的时间。

简单地讲,语句执⾏的时间越短越好(尤其对于系统的终端⽤户来说)。

⽽对于查询语句,由于全表扫描读取的数据多,尤其是对于⼤型表不仅查询速度慢,⽽且对磁盘IO造成⼤的压⼒,通常都要避免,⽽避免的⽅式通常是使⽤索引Index。

三:使⽤索引的优势与代价。

优势:1)索引是表的⼀个概念部分,⽤来提⾼检索数据的效率,ORACLE使⽤了⼀个复杂的⾃平衡B-tree结构. 通常,通过索引查询数据⽐全表扫描要快. 当ORACLE找出执⾏查询和Update语句的最佳路径时, ORACLE优化器将使⽤索引. 同样在联结多个表时使⽤索引也可以提⾼效率. 2)另⼀个使⽤索引的好处是,它提供了主键(primary key)的唯⼀性验证.。

那些LONG或LONG RAW数据类型, 你可以索引⼏乎所有的列. 通常, 在⼤型表中使⽤索引特别有效. 当然,你也会发现, 在扫描⼩表时,使⽤索引同样能提⾼效率.代价:虽然使⽤索引能得到查询效率的提⾼,但是我们也必须注意到它的代价. 索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本⾝也会被修改. 这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O . 因为索引需要额外的存储空间和处理,那些不必要的索引反⽽会使查询反应时间变慢.。

⽽且表越⼤,影响越严重。

使⽤索引需要注意的地⽅:1、避免在索引列上使⽤NOT , 我们要避免在索引列上使⽤NOT, NOT会产⽣在和在索引列上使⽤函数相同的影响. 当ORACLE”遇到”NOT,他就会停⽌使⽤索引转⽽执⾏全表扫描.2、避免在索引列上使⽤计算.WHERE⼦句中,如果索引列是函数的⼀部分.优化器将不使⽤索引⽽使⽤全表扫描.举例:代码如下:低效:SELECT … FROM DEPT WHERE SAL * 12 > 25000;⾼效:SELECT … FROM DEPT WHERE SAL > 25000/12;3、避免在索引列上使⽤IS NULL和IS NOT NULL避免在索引中使⽤任何可以为空的列,ORACLE性能上将⽆法使⽤该索引.对于单列索引,如果列包含空值,索引中将不存在此记录. 对于复合索引,如果每个列都为空,索引中同样不存在此记录. 如果⾄少有⼀个列不为空,则记录存在于索引中.举例: 如果唯⼀性索引建⽴在表的A列和B列上, 并且表中存在⼀条记录的A,B值为(123,null) , ORACLE将不接受下⼀条具有相同A,B值(123,null)的记录(插⼊). 然⽽如果所有的索引列都为空,ORACLE将认为整个键值为空⽽空不等于空. 因此你可以插⼊1000 条具有相同键值的记录,当然它们都是空! 因为空值不存在于索引列中,所以WHERE⼦句中对索引列进⾏空值⽐较将使ORACLE停⽤该索引.代码如下:低效:(索引失效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL;⾼效:(索引有效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE >=0;4、注意通配符%的影响使⽤通配符的情况下Oracle可能会停⽤该索引。

oracle优化方法总结

oracle优化方法总结

千里之行,始于足下。

oracle优化方法总结Oracle优化是提高数据库性能和响应能力的重要步骤。

本文总结了一些常见的Oracle优化方法。

1. 使用索引:索引是提高查询性能的主要方法。

通过在表中创建适当的索引,可以加快查询速度,并减少数据访问的开销。

但是要注意不要过度使用索引,因为过多的索引会增加写操作的开销。

2. 优化查询语句:查询语句的效率直接影响数据库的性能。

可以通过合理地编写查询语句来提高性能。

例如,使用JOIN来替代子查询,尽量避免使用通配符查询,使用LIMIT来限制结果集的大小等。

3. 优化表结构:表的设计和结构对数据库的性能也有很大的影响。

合理的表设计可以减少数据冗余和不必要的数据存储,提高查询速度。

例如,适当地使用主键、外键和约束,避免过多的数据类型和字段等。

4. 优化数据库参数设置:Oracle有很多参数可以用来调整数据库的性能。

根据具体的应用场景和需求,可以根据情况调整参数的值。

例如,调整SGA和PGA的大小,设置合适的缓冲区大小,调整日志写入方式等。

5. 使用分区表:当表的数据量很大时,可以考虑将表分成多个分区。

分区表可以加速查询和维护操作,提高数据库的性能。

可以按照时间、地域、业务等来进行分区。

6. 优化存储管理:Oracle提供了多种存储管理选项,如表空间和数据文件管理。

合理地分配存储空间和管理数据文件可以提高数据库的性能。

例如,定期清理无用的数据文件,使用自动扩展表空间等。

第1页/共2页锲而不舍,金石可镂。

7. 数据压缩:对于大量重复数据或者冷数据,可以考虑使用Oracle的数据压缩功能。

数据压缩可以减少磁盘空间的使用,提高IO性能。

8. 使用并行处理:对于大型计算或者批处理任务,可以考虑使用Oracle的并行处理功能。

并行处理可以将任务分成多个子任务,并行执行,提高处理能力和效率。

9. 数据库分区:对于大型数据库,可以考虑将数据库分成多个独立的分区。

数据库分区可以提高数据的并行处理能力,减少锁竞争和冲突,提高数据库的性能。

Oracle 索引的使用规则与性能调优

Oracle 索引的使用规则与性能调优

Oracle 索引的使用规则与性能调优索引分类逻辑上:Unique 唯一索引物理上:B-tree:Normal 正常型B树Bitmap 位图索引索引结构:B-tree:适合与大量的增、删、改(OLTP);不能用包含OR操作符的查询;适合高基数的列(唯一值多)典型的树状结构;每个结点都是数据块;大多都是物理上一层、两层或三层不定,逻辑上三层;叶子块数据是排序的,从左向右递增;在分支块和根块中放的是索引的范围;Bitmap:适合与决策支持系统;做UPDATE代价非常高;非常适合OR操作符的查询;基数比较少的时候才能建位图索引;树型结构:索引头开始ROWID,结束ROWID(先列出索引的最大范围)BITMAP每一个BIT对应着一个ROWID,它的值是1还是0,如果是1,表示着BIT对应的ROWID 有值;B*tree索引的话通常在访问小数据量的情况下比较适用,比如你访问不超过表中数据的5%,当然这只是个相对的比率,适用于一般的情况。

bitmap的话在数据仓库中使用较多,用于低基数列,比如性别之类重复值很多的字段,基数越小越好。

索引就好象一本字典的目录。

凭借字典的目录,我们可以非常迅速的找到我们所需要的条目。

数据库也是如此。

凭借Oracle数据库的索引,相关语句可以迅速的定位记录的位置,而不必去定位整个表。

虽然说,在表中是否创建索引,不会影响到Oracle数据库的使用,也不会影响数据库语句的使用。

这就好像即使字典没有目录的话,用户仍然可以使用它一样。

可是,若字典没有目录,那么可想而知,用户要查某个条目的话,其不得不翻遍整本字典。

数据库也是如此。

若没有建立相关索引的话,则数据库在查询记录的时候,不得不去查询整个表。

当表中的记录比较多的时候,其查询效率就会很低。

所以,合适的索引,是提高数据库运行效率的一个很好的工具。

不过,并不是说表上的索引越多越好。

过之而不及。

故在数据库设计过程中,还是需要为表选择一些合适的索引。

Oracle数据库参数优化

Oracle数据库参数优化

千里之行,始于足下。

Oracle数据库参数优化Oracle数据库参数优化是指通过调整数据库的配置参数,提高数据库的性能和稳定性。

下面是一些常见的Oracle数据库参数优化技巧:1. SGA参数优化:- 调整sga_target参数以控制SGA的大小。

SGA包括数据库缓冲区、共享池、重做日志缓冲区等,适当调整SGA的大小可以减少IO操作,提高数据库性能。

- 调整db_cache_size参数以增大数据库缓冲区的大小,提高数据块的访问速度。

- 调整shared_pool_size参数以增大共享池的大小,提高SQL语句的解析和执行效率。

2. PGA参数优化:- 调整pga_aggregate_target参数以控制PGA的大小。

PGA是用于处理SQL查询和排序的内存区域,适当调整PGA的大小可以减少磁盘IO操作,提高查询和排序的性能。

3. Redo日志参数优化:- 调整log_buffer参数以增大重做日志缓冲区的大小,减少频繁的重做日志刷新操作,提高数据库的写入性能。

- 调整log_checkpoint_timeout参数以控制重做日志刷新的频率,避免过于频繁的刷新。

4. 并行处理参数优化:- 调整parallel_max_servers参数以增大并行处理的资源限制,提高并行查询和并行DML操作的性能。

第1页/共2页锲而不舍,金石可镂。

- 调整parallel_min_servers参数以设置最小的并行处理资源数,避免并行操作的启动延迟。

5. SQL优化:- 使用合适的索引和优化的SQL语句,优化查询的执行计划。

- 使用绑定变量而不是直接将参数传递到SQL语句中,避免SQL重解析,提高性能。

6. 服务器参数优化:- 调整processes参数以增加数据库的并发连接数。

- 调整sessions参数以控制数据库的最大会话数。

- 调整open_cursors参数以增大打开游标的数量,避免游标溢出。

以上是一些常见的Oracle数据库参数优化技巧,但具体的优化策略需要根据实际情况进行调整,可以参考Oracle官方文档和专业的DBA建议。

oracle索引优化原则

oracle索引优化原则

oracle索引优化原则Oracle索引是数据库优化中非常重要的一部分,它们能够在查询数据时提高查询效率和性能。

然而,在使用Oracle索引时,需要遵守一些原则,以便最大程度地提高查询效率和性能。

以下是一些Oracle索引优化的原则。

1.只在需要时使用索引Oracle索引能够帮助我们提高查询效率和性能,但它们也会降低更新和插入数据的速度。

因此,我们应当仅在需要时使用索引。

如果使用过多的索引,会导致查询语句变得复杂并且更新和插入速度变慢,从而影响整个数据库系统的性能。

2.使用唯一性索引唯一性索引可以帮助我们避免重复数据的插入和更新。

当数据库表中的某个列需要具有唯一性时,我们可以使用唯一性索引来实现。

这将确保同一列中的值不重复,从而提高整个数据库系统的性能。

3.使用复合索引如果查询语句需要同时查询多个列,我们可以使用复合索引来提高查询效率和性能。

使用复合索引时,需要注意索引的顺序,应该从前往后按照查询条件的顺序构建索引。

这样可以避免Oracle优化器无法使用索引而导致的全表扫描。

4.选择正确的索引类型Oracle提供不同的索引类型,包括B树索引、位图索引、函数索引等。

在选择索引类型时,我们应当根据查询语句的类型和数据的特点来选择最适合的索引类型。

例如,如果查询语句需要对大量的布尔类型或枚举类型数据进行查询,那么位图索引可能比B树索引更适合。

5.避免过度索引化过多的索引将会降低数据库系统的性能,每个索引都需要消耗一定的内存和磁盘空间,使得查询和更新操作变得更慢。

因此,我们应避免对相同的列建立多个重复的索引,并仅为确实需要的列创建合适的索引。

6.定期维护索引当数据表中的数据发生变化时,索引也需要随之更新。

因此,我们需要定期进行索引维护和优化,以确保索引数据与实际数据的一致性。

这样可以避免索引中出现“死数据”,也可以提高查询效率和性能。

在某些情况下,Oracle优化器会选择错误的索引,从而影响查询效率和性能。

oracle 递归查询优化的方法

oracle 递归查询优化的方法

oracle 递归查询优化的方法Oracle数据库是一种常用的关系型数据库管理系统,具有强大的查询功能。

在实际开发中,我们经常会遇到需要递归查询的情况,即查询某个节点的所有子节点或祖先节点。

然而,递归查询往往会涉及到大量的数据和复杂的逻辑,导致查询效率低下。

因此,本文将介绍一些优化递归查询的方法,以提高查询效率。

1. 使用CONNECT BY子句进行递归查询Oracle提供了CONNECT BY子句来支持递归查询。

通过使用CONNECT BY子句,我们可以轻松地实现递归查询,例如查询某个员工及其所有下属员工的信息。

CONNECT BY子句的基本语法如下:```SELECT 列名FROM 表名START WITH 条件CONNECT BY PRIOR 列名 = 列名;```其中,START WITH子句用于指定递归查询的起始节点,CONNECT BY PRIOR子句用于指定递归查询的连接条件。

通过合理设置起始节点和连接条件,我们可以实现不同类型的递归查询。

2. 使用层次查询优化递归查询在递归查询中,我们经常会遇到多层递归查询的情况,即查询某个节点的所有子节点及其子节点的子节点。

这时,可以使用层次查询来优化递归查询。

层次查询是一种特殊的递归查询,通过使用LEVEL伪列可以获取每个节点的层次信息。

例如,我们可以使用以下语句查询某个员工及其所有下属员工的信息及其层次信息:```SELECT 列名, LEVELFROM 表名START WITH 条件CONNECT BY PRIOR 列名 = 列名;```通过使用LEVEL伪列,我们可以方便地获取每个节点的层次信息,从而更好地理解查询结果。

3. 使用递归子查询优化递归查询在某些情况下,使用CONNECT BY子句可能会导致查询效率低下,特别是在处理大量数据时。

这时,可以考虑使用递归子查询来优化递归查询。

递归子查询是一种特殊的子查询,通过使用WITH子句和递归关键字来实现递归查询。

基于Oracle Spatial的空间数据库的索引与查询优化

基于Oracle Spatial的空间数据库的索引与查询优化
计 算 机 系 统 应 用
h t t p : / / w w w. c - S — a , o r g . c n
2 0 1 4年 第 2 3卷 第S p a i t a l 的空间数据库 的索引与查询优
钟伟清 。 ,武 伟 ,杜国伟 。
( 西 南大 学 计 算机 科 学 与 信 息 学 院,重 庆 4 0 0 7 0 0 ) ( 西南大学 资源环境学 院,重庆 4 0 0 7 0 0 )
空 间数据 是 以坐标 和 拓扑 关系 的形 式存 储 的用
于描述有关空 间实体的位置 、 形状 和相互关系 的数据 , 在地理信 息系统 中有着 不可替代 的位置l 1 】 .随着地理
1 查 询模 型
O r a c l e S p a t i a l 使用双 层查询模型 , 来解决空 间查
操作符.
① 基 金项 目: 重庆 市 自然科 学基 金( C S T C , 2 0 1 0 B B1 0 0 8 )
收稿 时间 : 2 0 1 3 - 0 6 - 0 7 ; 收 到修 改稿 时间 : 2 0 1 3 - 0 7 . 2 6
Ab s t r a c t : Th i s p a p e r e x p l o r e s t h e c r e a t i o n of Or a c l e l Og s p a t i a l ’ S s p a t i a l i n d e x a n d h o w t o u s e s p a t i a l i nd e x t o o p t i mi z e s p a t i a l a n a l y s i s . The s p a t i a l q u e r y i s ma i n l y c a r r i e d o u t b y r e l e v a n t s p a t i a l o pe r a t o r a n d s p a t i a l f u n c t i o n . Us i n g s pa t i a l o p e r a t o r a n d s pa t i a l i n d e x c a n r e a l i z e s p a t i a l q u e y r o p t i mi z a t i o n. Ke y wo r ds : s pa t i a l i n d e x; s pa t i a l q u e y; r o r a c l e s pa t i a l ; o p t i mi z e
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle索引分析与查询优化
作者:崔黎明志远李婧
来源:《数字技术与应用》2016年第07期
摘要:Oracle是目前国内在大型数据存储中用得比较多的一种关系型数据库,磁盘阵列技术(RAID)和集群技术(RAC)的运用,使Oracle在处理数据效率和数据安全上有非常大的提高,在国内交通、电力,通信和金融等重要领域都有广泛的用途。

本文基于Oracle 11g版本,对Rowid和索引的原理机制做出分析,并论述利用这些原理对大型数据表查询的优化。

关键词:Oracle Rowid 索引查询
中图分类号:TP311.13 文献标识码:A 文章编号:1007-9416(2016)07-0234-02
在逻辑上,Oracle是由多个表空间构成的,在新建一个表空间的时候,必须指定存储的文件,可以指向多个存储在不同磁盘上的数据。

表空间下面分为段、区、块。

新建一张表的时候,Oracle数据库就会为它创建一个段。

所谓区就是指连续的块(block)构成的空间,一般区包含8个空块,block是Oracle数据库最小的数据空间,一般为8k或16k,当开始往这个表中插入数据的时候,Oralce数据库会自动为这个表分配一个区,并把数据不断往此区进行填充,当数据填满此区后,Oralce数据库会重新为该表分配一个区而不是一个段。

实际上,对于我们不同的查询过程中,就是通过一些谓词过滤条件,从对应的数据块中获取正确的一行数据或多行数据。

如何快速定位到该数据行,是一个数据库学习者不断探索的方向。

1 Rowid
1.1 简介
从字面上理解是行标识的意思,它是Oracle数据库中数据表的一个伪列,用于存放该表中每一行数据的地址,在8i版本之前,Oracle采用受限制的rowid,它是由数据文件编号,块编号和数据在该块内的偏移量这三个部分构成,长度为6个字节,因此在8i之前的版本中,每个数据库最多可以包含1022个文件,每个文件最多能有4m个数据块,而每个数据库最多能存储64k条记录。

为了突破长度的限制和解决其他一些缺陷,Oracle数据库引入了这样一个概念:相对文件号。

它的主要特点是改变之前rowid中数据文件编号是整个数据库范围组成的表空间,即文件编号为5的文件不再是数据库中编号为5的数据文件,而是表空间中对应编号的数据文件。

如下图1所示为Oracle11g中一个普通表的rowid。

从该图1中可以看到rowid共有18位,分为四部分,格式为:AAAAAABBBCCCCCCDDD,其中AAAAAA六位表示dataobjectid,根据这个id可以确定该行数据在哪个段中;BBB三位表示相对文件号,通过这个字段号可以用来确定该行数据的绝对文件号;CCCCCC六位表示datablocknumber,它是相对于datafile的编号;最后三位DDD
表示该行数据在哪一行。

通过Oracle数据库自带的一些函数可以把字符串转成数字形式图2所示。

1.2 rowid的应用
(1)通过rowid查找重复记录的数据,sql如下:
(2)通过rowid删除重复记录的方法:
2 索引
2.1索引的概念
一般情况下,用户对数据库最多的操作是进行数据查询,当一张表很大需要进行全表扫描时,查询就需要很长的时间,服务器会造成大量的资源浪费,同时也会让用户体验效果变得很差。

因此,Oracle数据库引入了索引的机制。

索引是一个独立的物理存储结构,类似于C语言中的指针的概念,是表中一列或者多列和指向表中存储这些列值的地址的数据,实际上就是Rowid。

索引的本质,就是根据rowid,再到数据表中定位到某条数据。

类似于一本书,索引是目录,而书的内容是数据,那么rowid就是联系目录和内容的那一个“页码”。

2.2 索引的分类
Oralce数据库提供了多种类型的索引供选择使用,在给定条件下选择什么类型的索引,是单列还是组合列,对于数据库的性能来说非常重要。

本文对常用的几种索引做下分析。

2.2.1 B树索引
Oracle数据库默认创建的是B树索引,可以有多列构成复合索引,但最多不能超过32列。

B数索引的结构如下图3所示。

其中最顶层称为根节点,最底层称为叶子节点,每个叶子节点包含了索引值、Rowid以及指向后一个叶子节点和前一个叶节点的指针,因此Oracle可以分别从前后两个方向来遍历这个二叉树。

创建B树索引的语法如下:
createindex索引名on表名(列名[,列名,......]);
一般来说,当取出的数据行数占整个表的比例很小的时候,该索引的性能会很高;但是,当该比例超过10%的时候,使用索引的效率就会变差,此时,Oracle在基于CBO的规则下会选择使用全表扫描。

表kjyq_rz2016共中有21000条数据,其中某个字段compid=“440C”的数据共有5000余条,此时在利用compid字段过滤进行查询时,Oralce就会选择使用全表扫描方式进行,执行计划如图4所示。

而如果在查询的时候强制使用索引方式,反而效果不好,强制索引的执行计划如图5所示。

对比两图来看,在强制使用索引的情况下,cost和iocost是使用全表扫描的将近5倍。

所以在实际生产环境中,尽量让Oracle数据库自动选择执行计划而少用hint方式去强制使用索引。

2.2.2 位图索引
位图索引适用于在重复度比较高的场景中,比如某个表中包含性别列,它只可能有男和女两个值。

如果需要按照此列作为过滤条件,此时就可以把此列设置为位图索引列。

应该注意的是,该列的不同值如果越少效果就越好。

普通B树索引的索引结构中存储着键值和键值的Rowid,并且是一一对应的,而位图索引主要针对大量相同值的列而创建(例如:类别,操作员,部门ID等),索引块的一个索引行中存储键值和起止Rowid,以及这些键值的位置编码,位置编码中的每一位表示键值对应的数据行的有无,一个位图索引块可能指向的是几十甚至成百上千行数据的位置。

创建位图索引的语法如下:
createbitmapindex索引名on表名(列名[,列名,......]);
还是针对上面的test1表进行处理,删除掉B数索引,同时在compid列上增加位图索引,以该列作为过滤条件进行查询,执行计划如下图6所示。

从执行计划来看,Oracle此时会自动按照位图索引的方式而不是选择全表扫描的方式了,对比上面的全表扫描方式和普通索引方式,无论是cost,iocost还是cpucost都有非常好的效果。

3 结语
本文对rowid,常用的B树索引和位图索引根据实际情况做了相应的对比分析,并利用Oracle11g做了对比测试。

我们在实际的数据库生产运用环境中,需要根据业务需求和表结构选择使用最适合的索引,如果出现索引失效的情况,则需重建索引。

同时也要定期检查表中的数据变化,根据不同的数据变化情况做出相应的更改,及时有效的进行数据库的建立和维护。

参考文献
[1]冯亚丽,蔡金武,冯正利,吕洪艳,刘芳吉.基于表结构及索引的Oracle查询优化研究[J].哈尔滨商业大学学报(自然科学版),2011(06).
[2]刘华清,陈振东,涂刚.数据库索引与优化[J].现代计算机(专业版),2012(18).
[3]赵琛.Oracle服务器性能影响因素分析与优化[J].电脑编程技巧与维护,2011(20).
[4]刘威,周嫦娥.1553B网络数据处理系统数据库优化设计[A].2011航空试验测试技术学术交流会论文集[C].2010.
[5]马传松.基于Oracle分布式数据库远程数据的维护和安全性的研究[D].广东工业大学,2003.
[6]张新林.范式下的Oracle数据库设计及其动态交叉表的生成[J].计算机与现代化,2005(09).。

相关文档
最新文档