当前位置: 首页 > article >正文

oracle:让is null使用索引

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

 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 值。

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更低


http://www.kler.cn/a/132640.html

相关文章:

  • 调整Windows键盘上只能看到拼音而无法看到实际的文本以及关闭输入法悬浮窗方法
  • [深度学习]卷积神经网络的概念,入门构建(代码实例)
  • M2 Mac Xcode编译报错 ‘***.framework/‘ for architecture arm64
  • IPv4数据报格式
  • 我认为除了HelloWorld之外,Python的三大数据转换实例可以作为开始学习Python的入门语言。
  • jenkins 使用原生 git clone 命令,指定ssh密钥文件
  • C++之set/multise容器
  • Linux 无名管道实现文件复制
  • 阿里面试面试题
  • 【P1010 [NOIP1998 普及组] 幂次方】
  • C#匿名方法介绍Action、Func、柯里化Currying
  • 1234234234
  • PostgreSQL按月计算每天值的累加
  • Java之线程的概念及方法的学习
  • JVM实战-JVM之类加载时机
  • C++构造函数 拷贝构造函数 括号法显示法隐式转换法实现类
  • openGauss学习笔记-126 openGauss 数据库管理-设置账本数据库-归档账本数据库
  • 鸿蒙LiteOs读源码教程+向LiteOS中添加一个系统调用
  • Unity - Cinemachine
  • SQL题