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提升优化器就走了索引了。

  • 相关阅读:
    [转]了解ASP.NET MVC几种ActionResult的本质:EmptyResult & ContentResult
    [转]XPath 语法
    [转]XSL 语言
    [转]项目经理面试指南
    [转]《精通css》笔记1:css选择器与优先级
    [转]jQuery 简介
    [转]Android 70道面试题
    [书目20130316].NET应用架构设计:原则、模式与实践
    [转]XPath语法 在C#中使用XPath示例
    [转]Android面试3
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330656.html
Copyright © 2011-2022 走看看