`
tianlijia202
  • 浏览: 78065 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

索引问题

    博客分类:
  • sql
 
阅读更多
 
oracle 索引失效原因及解决方法
2010年11月26日 星期五 17:10

一、以下的方法会引起索引失效

‍1,<>
2,单独的>,<,(有时会用到,有时不会)
3,like "%_" 百分号在前.
4,表没分析.
5,单独引用复合索引里非第一位置的索引列.
6,字符型字段为数字时在where条件里不添加引号.
7,对索引列进行运算.需要建立函数索引.
8,not in ,not exist.
9,当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
10, 索引失效。
11,基于cost成本分析(oracle因为走全表成本会更小):查询小表,或者返回值大概在10%以上
12,有时都考虑到了 但就是不走索引,drop了从建试试在
13,B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null   都会走
14,联合索引 is not null 只要在建立的索引列(不分先后)都会走, 
in null时   必须要和建立索引第一列一起使用,当建立索引第一位置条件是is null 时,其他建立索引的列可以是is null(但必须在所有列都满足is null的时候),或者=一个值;
当建立索引的第一位置是=一个值时,其他索引列可以是任何情况(包括is null =一个值),以上两种情况索引都会走。其他情况不会走。

二、索引失效解决方法

1. 选用适合的Oracle优化器

Oracle的优化器共有3种:

a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性)。

设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS 。你当然也在SQL句级或是会话(session)级对其进行覆盖。

为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性。

如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关。如果table已经被analyze过, 优化器模式将自动成为CBO , 反之,数据库将采用RULE形式的优化器。

(分析table

analyze table PROD_PARTS compute statistics;

ANALYZE TABLE PROD_PARTS COMPUTE STATISTICS FOR ALL INDEXED COLUMNS;

analyze table PROD_PARTS compute statistics for table for all indexes for all indexed columns;

)【有一次索引失效之后,请教DBA后,发现是数据统计的问题,具体的解决办法是执行以上语句】

在缺省情况下,Oracle采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan), 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器。

2、‍重建索引 
‍alter index 索引名 rebuild 【online】

3、强制索引

给该语句加上hint后,强制其使用'RECORD_ENTITYID' 这个索引

sql语句变成这样

引用

select /*+ index(record,record_entityid) */ *

from RECORD

where entityId='24' and entityType='blog';

/*+ index(record,record_entityid) */ 中,index表示强制使用index,record是表名,record_entityid是索引名。其执行计划跟测试数据库上一致,都是使用用 'RECORD_ENTITYID' 这个索引,逻辑读写同样为4。

后来经过测试,在不加hint的情况下,对该表和两个索引执行analyze 后,同样也能使用 'RECORD_ENTITYID' 这个索引。但是因为该表更新颇为频繁,不知道要多久就要再分析一次

分享到:
评论

相关推荐

    oracle索引,常见索引问题

    Oracle数据库中的索引是优化查询性能的关键工具,它...因此,当遇到常见的索引问题时,如索引未被使用、索引碎片化、索引过多或过少等,都需要深入分析并采取相应的解决方案,如重建索引、优化查询语句或调整索引策略。

    枚举量的索引问题

    本篇文章将深入探讨如何在C++和Qt环境下处理枚举量的索引问题,特别是如何利用`QMap`和`QSet`等数据结构来管理这些枚举值。 首先,C++中的枚举类型分为两种:标准枚举(enum)和枚举类(enum class)。标准枚举默认...

    Python算法:如何解决回文索引问题.rar_回文索引_索引

    在Python编程语言中,回文索引问题是一个有趣的算法挑战,它涉及到字符串处理和数组操作。回文是指正读反读都能读通的词语,比如“上海自来水来自海上”。回文索引问题则是指在给定字符串中找到所有能够形成回文子串...

    Oracle索引问题诊断与优化

    本文将深入探讨Oracle索引问题的诊断与优化。 首先,通过实验我们看到,未建立索引的表s1在执行查询时耗时2.45秒,而建立了索引的表s2则只需0.59秒,这清楚地显示了索引对于提高查询速度的作用。索引可以极大地减少...

    Lucene5学习之增量索引(Zoie)

    Lucene本身并不直接支持增量索引,因此,开发者们开发了Zoie系统,它是基于Lucene的一个扩展,旨在解决大数据量场景下的实时索引问题。Zoie的名字来源于“Zero Indexing Overhead”,即零索引开销,它的核心思想是...

    完美解决webstorm启动索引文件卡死的问题

    然而,在使用WebStorm对包含大量依赖项的项目进行索引时,有时会遇到性能问题,其中一种表现就是WebStorm在启动时索引node_modules文件夹导致卡死。 node_modules文件夹是npm安装的依赖包存放地。在大型项目中,这...

    mysql面试题,以及经典的索引问题详解

    本文将深入探讨MySQL面试中的常见问题,特别是与索引相关的经典问题。 首先,我们要了解什么是索引。索引是数据库管理系统用于快速查找数据的一种数据结构,类似于书籍的目录。它允许数据库系统不必扫描整个表就能...

    Oracle为sdo_geometry创建空间索引

    本文将详细介绍如何在 Oracle 中创建空间索引,包括创建空间索引的步骤、注意事项和常见问题。 一、 创建空间索引前的准备 在创建空间索引之前,需要先创建一个包含 sdo_geometry 数据类型的表。sdo_geometry 是 ...

    索引分词查看工具

    总的来说,Luke 6.0作为一款强大的索引查看工具,它不仅简化了对Lucene索引的理解,而且提供了丰富的分析功能,对于优化搜索性能、调试索引问题以及提升整体搜索体验都具有显著的帮助。如果你在处理Lucene索引时遇到...

    php mysql索引问题

    本文将围绕“PHP MySQL索引问题”展开讨论,介绍MySQL索引的创建、作用以及优化策略。 首先,我们创建一个表时,会涉及到主键和自动递增(AUTO_INCREMENT)的概念。在描述中提到了使用GUI工具创建表,并设置了REF...

    MySQL批量插入和唯一索引问题的解决方法

    通过理解这些问题并应用相应的解决方案,你可以更有效地处理MySQL中的批量插入和唯一索引问题,确保数据的完整性和系统的稳定性。在实际操作中,还需要注意数据库性能优化,避免过度增加索引或不当的批量操作对系统...

    Matlab索引

    Matlab 索引 Matlab 是一款功能强大的数学软件,广泛应用于科学计算、数据分析、图形显示等领域。Matlab 索引是 Matlab 中的一个重要概念,它提供了一个快速查找和了解 Matlab 中的符号、指令、模块和图形对象属性...

    查看索引库文件

    通过使用Luke,开发者和管理员可以更好地理解Lucene是如何处理和存储数据的,这对于优化搜索性能、调试索引问题以及了解搜索结果的生成过程非常有帮助。 总结来说,“查看索引库文件”涉及到的核心技术是Lucene,它...

    【技术】检查该重新编译的索引

    这些工具可以帮助我们自动化检测和处理索引问题,减少手动操作的复杂性。 6. **性能监控**:持续监控数据库的性能指标,如CPU使用率、I/O等待时间等,当发现与索引相关的性能下降时,应考虑是否需要重新编译索引。 ...

    Lucene索引文件查看工具lukeall4.7.1

    9. **元数据查看**:除了文档内容,LukeAll还可以展示索引级别的元数据,如版本信息、段信息等,这些信息对于诊断索引问题和优化索引结构极具价值。 10. **自定义配置**:用户可以根据需求配置LukeAll,比如选择...

    Mybatis Plus 自定义批量插入或批量更新(根据唯一索引)

    然而,当涉及到唯一索引时,简单的批量操作可能无法满足需求,因为可能会有重复的数据导致冲突。 在 Mybatis Plus 中自定义批量插入,我们可以通过继承 `AbstractService` 类并覆写 `batchInsert()` 方法来实现。在...

    Python Pandas 获取列匹配特定值的行的索引问题

    ### Python Pandas 获取列匹配特定值的行的索引问题 在进行数据分析时,我们经常需要根据某一条件筛选数据,特别是在使用Python中的Pandas库时。本文将详细介绍如何使用Pandas来查找DataFrame中某一列匹配特定值的...

Global site tag (gtag.js) - Google Analytics