null 索引失效 oracle,oracle函数索引解决null字段导致索引失效问题

11

我们知道索引列如果出现null值会导致索引失效。具体情况如下:

表中数据如下: 可见storeid列有null值。

当执行查询语句:select * from demo  where storeid= '10';时我们通过plsql的sql分析(F5触发)可以看到触发全表查询。

那该如何让该在字段有空值的情况下触发索引呢?

有两种方法:

1、建立函数索引 create index xxx on 表名(列名,1)    ----相当于给默认值1

2、建立函数索引create index xxx on 表名( decode(列名,null,1))   ---使用decode函数判空则给默认值1

具体执行情况如下,

第一种方法sql分析: 可以看到已经触发索引

--建索引语句  create index demo_t on demo(storeid,0);

--查询语句      select * from demo  where storeid= '10';

第二种方法sql分析:也触发了索引

--建索引语句 create index demo_t on demo(decode(storeid,null,0,storeid));

--查询语句  select * from demo  where DECODE(STOREID,NULL,0,STOREID)= '10';

总结:

以上就是oracle中的函数索引解决空字段导致索引失效问题。

---------------------

作者:盐城吊霸天

来源:CSDN

原文:https://blog.csdn.net/qq_23974323/article/details/81452891?utm_source=copy

版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库中,索引失效可能是由以下几种情况引起的: 1. 使用了不等于(<>)操作符会导致索引失效。 2. 单独使用了大于(>)或小于(<)操作符也会导致索引失效。 3. 在LIKE语句中,如果通配符百分号(%)在前面,索引也会失效。 4. 表没有进行分析(analyze)操作,导致索引失效。 5. 单独引用了复合索引中非第一列的索引列也会导致索引失效。 6. 字符型字段被当作数字时,在WHERE条件中未添加引号,会导致索引失效。 7. 对索引列进行运算会导致索引失效,需要建立函数索引。 8. 使用NOT IN或NOT EXISTS操作符也会导致索引失效。 9. 当变量采用的是时间类型(date)而表的字段采用的是日期时间类型(timestamp)时,索引也会失效。 10. 基于成本分析,如果查询的表是一个小表,或者返回的结果集占总数据量的10%以上,Oracle可能会选择不使用索引来执行查询操作。 11. 在某些情况下,即使已经考虑到了上述因素,索引仍然不会被使用,此时可以尝试重新创建索引。 需要注意的是,以上列举的情况只是一部分可能导致索引失效的原因,还有其他因素也可能导致索引失效。因此,在开发中,需要仔细分析查询语句和表结构,确保索引的有效使用,以提高查询性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Oracle索引失效](https://blog.csdn.net/qq_24330181/article/details/131590149)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [oracle 索引失效原因及解决方法](https://blog.csdn.net/qq_33720158/article/details/120155313)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值