oracle:让is null使用索引

一些性能不佳的查询涉及"IS NULL"条件,类似于:

bash 复制代码
 SQL>UPDATE T1 SET id2 = 1 WHERE id2 IS NULL;
 
Execution Plan
----------------------------------------------------------
Plan hash value: 2927627013
---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | UPDATE STATEMENT   |      |     4 |    52 |    80   (2)| 00:00:01 |
|   1 |  UPDATE            | T1   |       |       |            |          |
|*  2 |   TABLE ACCESS FULL| T1   |     4 |    52 |    80   (2)| 00:00:01 |

Oracle 不会在索引中存储 NULL 值,因此即使 T1.ID2 列上确实存在索引,它也无法使用。

有一个有用的索引技巧可以帮助调整这个语句。 创建一个索引并将常量值添加到索引末尾,以便存储 NULL 值。

bash 复制代码
SQL> create index idx_id2 on t1(id2,1)
SQL>  UPDATE T1 SET id2 = 1 WHERE id2 IS NULL;
99999 rows updated.
Execution Plan
----------------------------------------------------------
Plan hash value: 4068505729

-----------------------------------------------------------------------------
| Id  | Operation         | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | UPDATE STATEMENT  |         |     4 |    52 |    33   (0)| 00:00:01 |
|   1 |  UPDATE           | T1      |       |       |            |          |
|*  2 |   INDEX RANGE SCAN| IDX_ID2 |     4 |    52 |    33   (0)| 00:00:01 |
-----------------------------------------------------------------------------

这一次,sql选择走index,并且cost更低

相关推荐
傻啦嘿哟8 分钟前
物流爬虫实战:某丰快递信息实时追踪技术全解析
java·开发语言·数据库
optimistic_chen18 分钟前
【Redis 系列】Redis详解
linux·数据库·redis·缓存·xsheel
熊文豪25 分钟前
17年稳定运行:金仓数据库如何成为电力行业的“数字基石“
数据库·kingbasees·金仓数据库·电科金仓·kes
r***113325 分钟前
Redis--模糊查询--方法实例
数据库·redis·缓存
q***710130 分钟前
SQL注入(SQL Injection)攻击原理与防御措施
数据库·sql·oracle
f***R839 分钟前
解决bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException
java·数据库·sql
T***192040 分钟前
实操解决Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错的问题
数据库·postgresql
Slow菜鸟1 小时前
Java开发规范(十一)| 数据全生命周期治理规范—Java应用的“数据资产化手册”
java·servlet·oracle
·云扬·1 小时前
Redis性能测试实战:掌握redis-benchmark工具用法与集群压测技巧
数据库·redis·缓存
2401_837088501 小时前
秒杀优化—基于 Redis 完成秒杀下单
数据库·redis·缓存