• 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 |
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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 |
    -----------------------------------------------------------------------------
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

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

  • 相关阅读:
    cuda-gdb 支持内置变量的实现机制
    怎么给网络加速
    浅谈智能安全配电装置在老年人建筑中的应用
    python 炸敌人。
    开源模型应用落地-工具使用篇-SLB(二)
    学习css过渡动画-transition
    NAND闪存市场彻底复苏
    在React中引用CSS方式及写法大全
    通过热敏电阻计算温度(二)---ODrive实现分析
    页面交互(js与HTML,css的使用)
  • 原文地址:https://blog.csdn.net/weixin_43230594/article/details/134468163