`
liwenshui322
  • 浏览: 518905 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle为什么没有使用索引场景

 
阅读更多

 

      场景1:

      假设有一个表T,在T(x,y)上有一个索引。如果我们做一个查询:select * from t where y=5。此时优化器不会使用索引,因为查询条件中不包含索引最前列(x列)。如果使用索引,可能必须查看每一个索引条目,因为索引键可能是这样排列的:1,2 1,3 1,4 1,5 2,1 2,4 2,6 3,1......我们不知道y=5会在哪个地方出现。但是假如x的取值较少,只有几个,那么会使用索引的。因为索引先是按x排序,后按y排序。如果x可取值很少,那么只需要根据x取值分成几个区间,然后逐个区间根据y值跳跃扫描即可。

      总之,如果你的索引是建立在多列上,如果查询条件中不包含最前列,那么索引大部分情况会无效。

 

      场景2:

      执行一个统计查询:select count(*) from t,表T上有一个B*树索引,但是查询优化器执行的是全表扫描,而非基于索引扫描。原因可能是,索引建立在允许空的列上,因为B*树索引对完全为null的行不会建立索引,就会漏掉一部分数据。如果按照索引扫描,就会漏掉一部分数据,因此查询优化器执行全表扫描是正确的选择。

 

      场景3:

      假设表中某一列只包含数字(在该列建立了索引),但是它定义的是字符串。将这一列当做条件进行查询本来该这样写:select * from t where indexed_column = '5'。如果我们这样写:select * from t where indexed_column = 5 就不会使用索引。因为会隐含地将SQL转换成:select * from t where to_number(indexed_column) = 5。因此就不会执行索引了,除非建立一个基于to_number函数的索引。

分享到:
评论

相关推荐

    oracle中索引的使用

    总的来说,Oracle中的索引使用是一门深奥的学问,涉及到索引的类型选择、创建、维护和优化等多个方面。只有深入理解并熟练掌握这些知识,才能在实际工作中发挥出索引的最大效能,为企业的数据库性能提供有力保障。

    oracle、sql数据库批量建索引

    在数据量庞大的情况下,索引的重要性尤为突出。 对于Oracle数据库,批量创建索引可以通过SQL命令或者PL/SQL脚本来实现。例如,你可以使用`CREATE INDEX`语句来创建单个索引,然后通过循环结构批量处理多个索引。...

    Oracle在线建立超大表的索引

    在Oracle数据库中,为含有千万级别记录的大表创建索引是一项挑战性任务,尤其是对于那些处于高并发在线生产环境中的表。本文将详细介绍如何为一个核心大表(INFO_CUSTOMER)创建一个全局B树索引,并在此过程中尽可能...

    oracle索引,常见索引问题

    过度使用索引可能导致插入、更新和删除操作变慢,而没有合适的索引则可能影响查询效率。 在设计数据库和优化查询时,理解这些索引类型及其工作原理至关重要。选择正确的索引类型和策略可以显著提升数据库系统的性能...

    分区索引,本地索引,全局索引的区别

    以创建有前缀的本地索引为例: ```sql CREATE TABLE test (id NUMBER, data VARCHAR2(100)) PARTITION BY RANGE (id) ( PARTITION p1 VALUES LESS THAN (1000) TABLESPACE p1, PARTITION p2 VALUES LESS THAN ...

    Oracle 创建索引的基本规则

    - **NULL值**: Oracle允许索引列包含NULL值,但需要注意的是,NULL值会被视为不同的值,这可能会影响到索引的效果。 - **BULK INSERT**: 大量数据插入时,可以考虑使用BULK INSERT操作来减少对索引的影响。 - **索引...

    Oracle+SQL优化之使用索引提示一例

    ### Oracle SQL优化与索引提示应用案例解析 在Oracle数据库管理与优化的实践中,SQL语句的执行效率直接影响着系统的响应速度与资源消耗。当面对复杂的查询或批量更新操作时,合理利用索引提示(Index Hint)成为...

    ORACLE索引详解及SQL优化

    本文将深入探讨Oracle索引的原理、创建方法,并结合SQL优化策略,帮助你提升数据库查询速度,降低资源消耗。 首先,我们要理解索引的基本概念。在数据库中,索引类似于书籍的目录,它为数据提供快速访问的途径。...

    Oracle索引分析与比较

    Oracle 索引是数据库管理系统中提升数据查询速度的关键组件,尤其在大型企业级应用中,选择合适的索引类型对于数据库性能至关重要。本篇文章将深入探讨Oracle中的B*Tree索引、反向索引、降序索引、位图索引和函数...

    oracle分区与索引

    Oracle提供了多种类型的索引,每种类型都有其适用场景。 ##### 1. 常见索引类型 - **B树索引**:最常见的索引类型,适用于各种查询场景。 - **位图索引**:适合于包含大量重复值的列,尤其是在进行大量选择操作时...

    oracle rac环境下索引热块的处理思路

    1. 无法使用索引的场景 索引并不总是有用的,有些情况下,索引可能会降低性能。例如,如果查询语句中的 WHERE 子句中包含多个列,而这些列都有索引,那么索引可能会被忽略。 2. 如何创建合适的索引 创建合适的...

    Oracle 索引

    Oracle索引是数据库管理系统中用于加速数据检索的关键结构。它们的工作原理类似于书籍的目录,允许数据库系统快速定位和访问特定的数据行,而无需扫描整个表。Oracle提供了多种类型的索引,包括B树索引、位图索引、...

    Oracle优化全攻略一【Oracle 索引概念】.docx

    总的来说,理解Oracle索引的工作原理并适当使用,是实现数据库高效运行的关键。正确选择和设计索引,避免使用限制索引的因素,能显著提高查询性能,减少数据库响应时间,从而提升整个系统的性能。在实践中,需要结合...

    oracle索引失效的总结

    ### Oracle索引失效的原因及解决方法 在Oracle数据库中,索引是提高查询效率的关键工具之一。然而,在实际的应用过程中,由于多种原因可能会导致索引失效,从而影响系统的性能。本文将详细介绍Oracle索引失效的一些...

    SQL语句索引优化_sql索引降龙十八掌(Oracle)

    总结,Oracle索引优化是一个涉及多方面因素的过程,包括索引类型选择、设计策略、维护以及特定于Oracle的技术。理解并熟练运用这些知识,能有效提升数据库的性能,降低系统响应时间,从而提高用户满意度。在实践中,...

    oracle索引类型及扫描方式大整理new

    ### Oracle索引类型详解 #### 一、B\*Tree索引:数据检索的基石 在Oracle数据库中,B\*Tree索引是最常见的索引结构,也是默认创建的索引类型。它基于二叉树原理,由分支块(branch block)和叶块(leaf block)构成,...

    ORACLE四招提高位图索引

    位图索引是Oracle数据库中的一种特殊索引类型,它在特定场景下能显著提高查询效率,尤其是在处理基数较小(即列中不重复值数量)的列时。本文将探讨如何通过四个策略来优化位图索引的使用。 首先,我们需要理解何时...

Global site tag (gtag.js) - Google Analytics