zoukankan      html  css  js  c++  java
  • 让索引包含null值的两种方法

    1. 把有NULL值的列与一个常数,或者一个带有not null约束的列一同索引

    create index ind_01 on t01(col01,1);

    或者

    create index ind_01 on t01(col01,col02); --col02 必须带有NOT NULL约束.

    下面是例子:

    CREATE TABLE TAB (COL1 NUMBER, COL2 NUMBER NOT NULL);
    INSERT INTO TAB SELECT CASE WHEN ROWNUM<=10 THEN NULL ELSE OBJECT_ID END,OBJECT_ID FROM ALL_OBJECTS;

    create index testx on tab(col1,col2);

    EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'TAB');

    SELECT * FROM TAB WHERE COL1 IS NULL;

    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 546044058

    --------------------------------------------------------------------------
    | Id  | Operation        | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT |       |     1 |     9 |     1   (0)| 00:00:01 |
    |*  1 |  INDEX RANGE SCAN| TESTX |     1 |     9 |     1   (0)| 00:00:01 |
    --------------------------------------------------------------------------

    Predicate Information (identified by operation id):
    ---------------------------------------------------

       1 - access("COL1" IS NULL)

    2.  把一个例上面的NULL值进行索引,非NULL值不索引,这样建立的索引会非常小,查询效率很高.

    但是在写SQL的时候,需要注意谓词条件必须与函数一致.

    create index ind_01 on t01(decode(col01,null,1,null));

    第一种方法适合用在除了NULL,其它的值也要用索引的情况。
    第二种方法适用用在只对NULL值会用到索引,所以这个索引会很小。

    END-

  • 相关阅读:
    全面分析C#方法中的ref和out
    SQL注入漏洞全接触入门篇
    如何使用四个语句来提高 SQL Server 的伸缩性
    5种提高SQL性能的方法
    SQL注入漏洞全接触高级篇
    网络游戏程序员须知 收包与发包
    SQL注入攻击的原理及其防范措施
    SQL注入漏洞全接触进阶篇
    C#委托的故事
    转眼又快一年了,最近没赚钱,在学习FLASH as3编程
  • 原文地址:https://www.cnblogs.com/princessd8251/p/3550471.html
Copyright © 2011-2022 走看看