见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp54
1) 没有查询条件,或者查询条件没有建立索引
2) 在查询条件上没有使用引导列
3) 查询的数量是大表的大部分,应该是30%以上。
4) 索引本身失效
5) 查询条件使用函数在索引列上(见12)
6) 对小表查询
7) 提示不使用索引
8) 统计数据不真实
9) CBO计算走索引花费过大的情况。其实也包含了上面的情况,这里指的是表占有的block要比索引小。
10)隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误. 由于表的字段tu_mdn定义为varchar2(20),
但在查询时把该字段作为number类型以where条件传给Oracle,这样会导致索引失效.
错误的例子:select * from test where tu_mdn=13333333333;
正确的例子:select * from test where tu_mdn='13333333333';
11)对索引列进行运算导致索引失效,我所指的对索引列进行运算包括(+,-,*,/,! 等)
错误的例子:select * from test where id-1=9;
正确的例子:select * from test where id=10;
12)使用Oracle内部函数导致索引失效.对于这样情况应当创建基于函数的索引.
错误的例子:select * from test where round(id)=10;
说明,此时id的索引已经不起作用了 正确的例子:首先建立函数索引,
create index test_id_fbi_idx on test(round(id));
然后 select * from test where round(id)=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 =一个值),
以上两种情况索引都会走。其他情况不会走。
相关推荐
3. **操作符**:某些操作符如`NOT`、`BETWEEN`、`LIKE`的模糊匹配可能导致索引失效,除非使用了前缀索引或全文索引。 4. **索引选择性**:索引的选择性越高,区分度越大,使用索引的效果越好。如果索引列的值过于...
Oracle数据库索引失效是一个常见的性能问题,它可能导致查询效率降低,影响系统的整体性能。索引失效可能是由多种原因引起的,理解这些原因并采取适当的预防措施至关重要。 首先,当WHERE子句中的条件筛选出的数据...
4. **IS NULL 和 IS NOT NULL**:在WHERE子句中直接使用`IS NULL`或`IS NOT NULL`也可能导致索引失效。可以使用`NVL`函数结合函数索引来避免这个问题。 示例: ```sql SELECT * FROM A WHERE NVL(B, C) = C ```...
4. 避免索引失效的操作:如在索引列上使用NOT操作符、计算表达式或函数,都可能导致索引无法被使用。 六、索引策略 建立索引并不意味着性能必然提高,合理的索引策略应考虑以下几点: 1. 数据分布:根据数据的均匀...
4. 索引失效:如果SQL语句使用全表扫描或不匹配索引的条件,索引可能无法发挥作用。 四、SQL优化 1. 使用EXPLAIN PLAN分析查询计划,理解索引使用情况。 2. 避免在索引列上使用NOT、、!=、BETWEEN、LIKE操作符...
2. **索引失效情况** - `OR`条件中,只有当索引覆盖所有条件时才有效。 - 使用`NOT IN`、`NOT EXISTS`或`<>`可能导致全表扫描。 - `LIKE`操作符前缀匹配可利用索引,但模糊匹配则无法利用。 3. **索引提示(Hint...
Oracle数据库中的索引是提升查询性能的关键因素,但设计和管理索引也需要...总之,Oracle索引设计是一个平衡查询速度和DML操作成本的过程。理解并应用上述原则可以帮助我们创建和优化数据库性能,提供更高效的服务。
本文主要总结了重建Oracle索引的相关知识点。 一、重建索引的前提条件 当表上的数据频繁进行`UPDATE`和`DELETE`操作,或者执行了`ALTER TABLE ... MOVE`操作导致ROWID改变时,可能需要考虑重建索引。这些操作可能...
- **索引失效**:当表结构更改或数据异常时,索引可能失效。通过重建索引或重新分析统计信息可解决。 - **索引碎片**:大量插入、删除和更新操作可能导致索引碎片,影响查询性能。定期整理索引以减少碎片。 - **...
例如,如果查询姓和名分开存储的员工,使用`first_name || '' '' || last_name = 'Bill Clinton'`会导致索引失效。正确的做法是分别比较`first_name`和`last_name`,即`first_name = 'Bill' AND last_name = '...
- 失效对象:查找并处理失效的对象,如视图、索引等,以保证数据完整性。 通过上述监控和管理,可以有效地预防和解决ORACLE数据库可能出现的问题,提升系统的稳定性和性能,降低业务中断的风险。
7. **隐式类型转换**:当索引列的类型与查询条件中的类型不符时,会发生隐式类型转换,这会导致索引失效。例如,字符串类型的列与整数比较时,应确保类型匹配,或创建正确的函数索引。 8. **部分索引匹配**:使用...
3. Oracle内部操作:了解Oracle数据库的内部操作可以更好地帮助开发者避免一些常见的性能问题,比如在索引列上使用计算,强制索引失效,避免使用耗费资源的操作等。 4. ORACLE优化器和SQL语句的执行:理解ORACLE...
了解索引的内部工作原理和如何避免索引失效,是提高数据库性能的关键。 2. **表设计与分区**:有效的表设计对于Oracle数据库的性能至关重要。书中有深入讲解关于分区技术,如范围分区、列表分区、哈希分区和复合...
- **尽量避免使用复杂的函数**:在WHERE子句中使用函数可能会导致索引失效,从而降低查询效率。 - **表关联优化**:在进行表关联时,推荐使用直接的表关联而不是存在性检查(EXISTS),以减少查询时间和资源消耗。 -...
3. **模糊匹配**: 使用`first_name || '' || last_name`的方式来进行匹配,可能导致索引失效,从而降低查询速度。 接下来,我们将逐一介绍几个关键的优化策略。 #### 优化策略 ### 1. 避免使用 IS NULL 或 IS NOT...
为了持续优化数据库性能,需要定期监控索引的使用情况,包括索引的查找率、失效率和空间利用率。通过分析数据库的SQL执行计划,可以发现哪些查询可以受益于新的或改进的索引。适时地重建、删除或调整索引配置,以...
Oracle通过RowID高效访问数据,但如果执行函数操作或进行前导模糊搜索,可能使索引失效,导致全表扫描。 - 在编写SQL时,确保大小写一致,以利于Oracle共享池和缓冲区中的SQL匹配。 2. **查询顺序**: - Oracle...