zoukankan      html  css  js  c++  java
  • 列定义允许null,可能导致Index Hint提升不走索引

    遇到一个SB问题,加index hint提升,居然也不走索引,郁闷良久,结果发现该表的定义允许null,这对优化器有影响

    SQL> desc emp
     名称                                                                                                      是否为空? 类型
     ----------------------------------------------------------------------------------------------------------------- -------- --------------

     EMPNO                                                                                                     NOT NULL NUMBER(4)
     ENAME                                                                                                              VARCHAR2(10)
     JOB                                                                                                                VARCHAR2(9)
     MGR                                                                                                                NUMBER(4)
     HIREDATE                                                                                                           DATE
     SAL                                                                                                                NUMBER(7,2)
     COMM                                                                                                               NUMBER(7,2)
     DEPTNO                                                                                                             NUMBER(2)
    我在ename上建立了一个index

    SQL> select table_name, index_name,column_name from user_ind_columns;

    TABLE_NAME                     INDEX_NAME                     COLUMN_NAME
    ------------------------------ ------------------------------ -----------------
    DEPT                           PK_DEPT                        DEPTNO
    EMP                            PK_EMP                         EMPNO
    EMP                            EMA_ENAME                      ENAME
    SQL> select dbms_metadata.get_ddl('INDEX','EMA_ENAME','SCOTT') FROM DUAL;

    DBMS_METADATA.GET_DDL('INDEX','EMA_ENAME','SCOTT')
    --------------------------------------------------------------------------------

      CREATE INDEX "SCOTT"."EMA_ENAME" ON "SCOTT"."EMP" ("ENAME")
      PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "USERS"

    SQL> select /*+ index(emp.ename) */ ename from emp;

    已选择14行。


    执行计划
    ----------------------------------------------------------
    Plan hash value: 3956160932

    --------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |    14 |    84 |     3   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS FULL| EMP  |    14 |    84 |     3   (0)| 00:00:01 |
    --------------------------------------------------------------------------
    可以看见即使提升了优化器走索引,结果优化器也不走

    SQL> alter table emp modify ename not null;

    表已更改。

    SQL> select /*+ index(emp.ename) */ ename from emp ;

    已选择14行。


    执行计划
    ----------------------------------------------------------
    Plan hash value: 1224545206

    ------------------------------------------------------------------------------
    | Id  | Operation        | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
    ------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT |           |    14 |    84 |     1   (0)| 00:00:01 |
    |   1 |  INDEX FULL SCAN | EMA_ENAME |    14 |    84 |     1   (0)| 00:00:01 |
    ------------------------------------------------------------------------------
    现在将列定义为非null,用hint提升优化器就走了索引了。

  • 相关阅读:
    Java面向对象练习输出水仙花
    Java面向对象练习学生信息输出
    java面线对象练习时钟
    java面向对象存取款
    0516Java面向对象求面积练习
    有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
    0516编写西游记人物类
    0514练习
    仓鼠找sugar
    NOIP2018旅行
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330656.html
Copyright © 2011-2022 走看看