oracle数据库索引失败

oracle数据库索引失败
今天一个同事突然问我为什么这个指标是无效的,其实失败的原因有很多。

但是,如果在索引之前使用相同的SQL,那么现在就不使用索引了,下面的主要案例是:

1。随着表的增长,有太多的数据来自条件和大于15%,使得索引无效(这将导致CBO计算的成本超过整个表)。

2。统计信息的失效需要重新收集统计信息。

三.索引本身失败需要重构索引

下面是为什么不使用索引的一些原因。

指标失效

1)没有查询条件,或者查询条件没有索引。

2)在查询条件下不使用引导列。

3)查询数是大表的大部分,应该大于30%。

4)索引本身失败

5)查询条件使用索引列上的函数(参见12)。

6)小表查询

7)提示不使用索引

8)统计数据不真实

9)CBO计算耗费过多引走钢索。它也包含了上述情况,这意味着该表的块小于指数。

10)隐式转换导致索引失败。这一点应该注意。这也是开发中常见的错误。因为表的字段tu_mdn定义为VARCHAR2(20),

但是在查询时,字段被传递给Oracle,并将其作为数字类型,其中的位置条件会导致索引失败。

错误的例子:SELECT * FROM测试,tu_mdn = 13333333333;

正确示例:SELECT * FROM测试,tu_mdn = '13333333333;

11)索引列的操作导致索引失败。我的意思是索引列的操作(+,-,*,,/!)。

错误的例子:SELECT * FROM测试,Id-1 = 9;

正确的示例:从id = 10的测试中选择*;

12)使用Oracle内部函数导致索引失败。在这种情况下,应该创建基于函数的索引。

错误的示例:从圆(id)= 10的测试中选择*;

在这种情况下,id索引此时不适用于正确的示例:首先,建立函数索引,

创建测试指标test_id_fbi_idx(圆(ID));

然后从圆(id)= 10中选择测试*;然后用1, 2个分开的>,<,<,(有时使用,有时不)来测试函数电缆。

3、像% _ 的牌子在前面。

4,表没有分析。

5、在第一个位置分别引用一个综合指数指数。

6,当字符字段是数字时,在WHERE条件下不添加引号。

7、索引列操作。需要建立一个函数索引。

8,不在,不存在。

9,当变量用作时间变量时,表的字段使用日期变量,或者使用相反的变量。

10、索引失败。

11,基于成本成本分析(Oracle是因为全表成本较小):查询小表,或返回值大于10%。

12,有时考虑到,但它不接受索引,而放弃尝试从构建。

13、B树索引为空就不去了,没有空去,位图索引为空,不为空就去

14,只要索引列(不连续)建立,联合索引不是空的,

当索引的第一位置条件为空时,必须与空值一起使用索引的第一列的建立,

构建索引的其他列可以为null(但必须在所有列满足时为空),

或=一个值;当索引的第一个位置是一个值时,另一个索引列可以是任何情况(包括a = NULL =值),

以上两个指标都会去,其他的也不会去。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部