oracle学习之索引误区

   大家都知道索引可以提高速率消除排序等,但是实际使用中往往存在滥用的情况,不仅浪费了资源,而且索引还起到了负面的作用。往往大家还不能觉察到这样的错误,导致生产系统故障。 普通索引: 普通索引很简单使用,不过实际上还有一些小的误区。

  1.问题:count(1) avg() sum() min() max()只有当索引非空情况下查询才会走索引

  解决方案:count()的时候如果有索引有空值无法解决。而avg() sum() min() max()处理时候加不加索引 is not null,结果一样,但是加索引is not null 时候会走索引扫描速度提高很多。

  2.min(),max()同时查询时候只有索引非空时候才会走索引。

  解决方案:加索引is not null,而且max() min()分开进行查询效率更高。

  3.问题:返回非索引列会产生table access by index rowid)

  解决方案:如果不需要查询非索引列尽量避免,这样可避免table access by index rowid,实在不行建立组合索引

  4.问题:索引可以提高速度,是不是索引越多越好?

  解决方案:索引并不是越多越好,索引要建的合理,否则插入、更新、删除效率很低。如果某一列有普通索引和组合索引,这时候考虑是不是如果组合索引第一列为普通索引时候,drop普通索引。

  另外也可以考虑现将索引失效,然后等操作完毕后使得索引生效。 当然生产库的操作尽量在业务少的时候做,以免占用资源,对系统造成压力。

时间: 2024-08-04 05:10:53

oracle学习之索引误区的相关文章

【DBA】 Oracle 学习路线

[DBA] Oracle 学习路线 出差归途火车上,有几个小时的时间,正好可以把Oracle 知识的学习框架梳理一下,这些都是Dave对Oracle的一些理解,共初学者参考. 本篇文章只介绍知识点,不涉及具体内容.   1       学习方法 很多初学者一直在门外徘徊的一个重要原因就是没有找到正确的学习方法,其实Oracle 需要系统的学习,这个过程可能需要2-3年.   最好的资料就是Oracle的官方手册:http://docs.oracle.com   当然,Dave的Blog 也是可以

Oracle之函数索引

Oracle之函数索引 在Oracle中,有一类特殊的索引,称为函数索引(Function-Based Indexes,FBI),它基于对表中列进行计算后的结果创建索引.函数索引在不修改应用程序的逻辑基础上提高了查询性能.如果没有函数索引,那么任何在列上执行了函数的查询都不能使用这个列的索引.当在查询中包含该函数时,数据库才会使用该函数索引.函数索引可以是一个B-Tree索引或位图索引. 用于生成索引的函数可以是算术表达式,也可以是一个包含SQL函数.用户定义PL/SQL函数.包函数,或C调用的

Oracle 反向键索引的原理和用途(减少索引热点块)

Oracle 反向键索引的原理和用途(减少索引热点块) 我们知道Oracle会自动为表的主键列建立索引,这个默认的索引是普通的B-Tree索引.对于主键值是按顺序(递增或递减)加入的情况,默认的B-Tree索引并不理想.这是因为如果索引列的值具有严格顺序时,随着数据行的插入,索引树的层级增长很快.搜索索引发生的I/O读写次数和索引树的层级数成正比,也就是说,一棵具有5个层级的B -Tree索引,在最终读取到索引数据时最多可能发生多达5次I/O操作.因而,减少索引的层级数是索引性能调整的一个重要方

为什么有时 Oracle 数据库不用索引来查找数据

oracle|数据|数据库|索引 当你运用 SQL 语言,向数据库发布一条查询语句时, ORACLE 将伴随产生一个"执行计划",也就是该语句将通过何种数据搜索方案执行,是通过全表扫描.还是通过索引搜寻等其它方式.搜索方案的选用与 ORACLE 的优化器息息相关. SQL 语句的执行步骤. 1 语法分析 分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2 语义分析 检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. 3 视图转换 将涉及视图的查询语句转换为相应的对基表

Oracle技术:索引与Null值对于Hints及执行计划的影响

由于B*Tree索引不存储Null值,所以在索引字段允许为空的情况下,某些Oracle查询不会使用索引. 很多时候,我们看似可以使用全索引扫描(Full Index Scan)的情况,可能Oracle就会因为Null值的存在而放弃索引. 在此情况下即使使用Hints,Oracle也不会使用索引,其根本原因就是因为Null值的存在. 我们看以下测试. 在username字段为Not Null时,Index Hints可以生效. 更多精彩内容:http://www.bianceng.cnhttp:/

oracle中,索引数据定位和索引扫描有什么区别?

问题描述 oracle中,索引数据定位和索引扫描有什么区别? oracle中,索引数据定位和索引扫描有什么区别? 是不是就是简单的扫描就是要扫完,定位只要查到就可以了? 解决方案 oracle索引扫描索引扫描高手闲谈Oracle索引扫描 解决方案二: http://blog.sina.com.cn/s/blog_54eeb5d90100q9zu.html 解决方案三: 索引数据定位和索引扫描 你说的应该是索引数据定位和全表扫描吧?如果用到索引的话,没必要进行扫描,可以通过二分法快速定位

MySQL源码学习:索引使用统计功能

今天刚刚知道Oracle有个索引统计的功能,可以统计每个索引的使用次数.作为一个Oracle的门外汉,我还是再次感叹人家做的是真细致.第二个想法就是给MySQL也加上. Percona版本的information_schema.innodb_index_stats 已经有索引的统计信息,我们就在巨人的肩膀上踩一脚了. 先来看下原来的表结构. CREATE TEMPORARY TABLE `INNODB_INDEX_STATS` ( `table_schema` varchar(192) NOT

ORACLE Index Lookup索引访问路径总结

  在ORACLE中,索引访问/查找(Index Lookup)路径有五种方式,分别为INDEX UNIQUE SCAN.INDEX RANGE SCAN.INDEX FULL SCAN.INDEX FAST FULL SCAN .INDEX SKIP SCAN.下面通过一些案例介绍.总结一下这五种索引访问路径.本文是总结这方面的知识点,所以文中一些地方参考.引用了参考资料中的部分内容.详细.具体资料可以参考官方资料Index Scans         索引唯一扫描(INDEX UNIQUE

Oracle关于重建索引争论的总结_oracle

索引重建是一个争论不休被不断热烈讨论的议题.当然Oracle官方也有自己的观点,我们很多DBA也是遵循这一准则来重建索引,那就是Oracle建议对于索引深度超过4级以及已删除的索引条目至少占有现有索引条目总数的20% 这2种情形下需要重建索引.近来Oracle也提出了一些与之相反的观点,就是强烈建议不要定期重建索引.本文是参考了1525787.1并进行相应描述. 1.重建索引的理由     a.Oracle的B树索引随着时间的推移变得不平衡(误解)     b.索引碎片在不断增加     c.索