8.2.1.8 IS NULL Optimization NULL 优化:

Oracle 对待null值:

SQL> create table t100(id int,name char(10));

表已创建。
begin
for i in 1 .. 1000
loop
insert into t100 values(i,'a'||i);
end loop;
commit;
end; BEGIN
DBMS_STATS.GATHER_TABLE_STATS(ownname => 'SYS',
tabname => 'T100',
estimate_percent => 100,
method_opt => 'for all columns size repeat',
no_invalidate => FALSE,
degree => 8,
cascade => TRUE);
END;
/ SQL> explain plan for select * from t100 where id=NULL; 已解释。 SQL> select * from table(dbms_xplan.display()); PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------
Plan hash value: 3750333395 ---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 15 | 0 (0)| |
|* 1 | FILTER | | | | | |
| 2 | TABLE ACCESS FULL| T100 | 1000 | 15000 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 1 - filter(NULL IS NOT NULL) 已选择14行。 Oracle 索引不存储NULL值 MySQL 可以执行相同的优化在col_name IS NULL ,它可以使用col_name=常值。 MySQL 可以使用indexes 和ranges 来搜索NULL 使用IS NULL mysql> select * from t100 where id is NULL;
+----+------+-------+------+
| sn | id | quota | free |
+----+------+-------+------+
| 11 | NULL | xx | yy |
+----+------+-------+------+
1 row in set (0.00 sec) mysql> explain select * from t100 where id is NULL;
+----+-------------+-------+------+---------------+-----------+---------+-------+------+-----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+-----------+---------+-------+------+-----------------------+
| 1 | SIMPLE | t100 | ref | t1oo_idx1 | t1oo_idx1 | 5 | const | 1 | Using index condition |
+----+-------------+-------+------+---------------+-----------+---------+-------+------+-----------------------+
1 row in set (0.00 sec) Oracle 里索引不存储NULL值,Mysql里索引包含NULL值 例子: SELECT * FROM tbl_name WHERE key_col IS NULL; SELECT * FROM tbl_name WHERE key_col <=> NULL; SELECT * FROM tbl_name
WHERE key_col=const1 OR key_col=const2 OR key_col IS NULL; 如果一个WHERE 子句包含一个col_name IS NULL 条件 对于一个列定义为NOT NULL, 那个表达式是优化掉的,这个优化不会发生 当列可能产生NULL,比如,如果它来自LEFT JOIN 右边的表 MySQL 也可以优化 组合 col_name = expr OR col_name IS NULL, 是解决子查询的常见形式, EXPLAIN 显示ref_or_null 当优化器被使用 mysql> explain select * from t100 where id=7 or id is NULL;
+----+-------------+-------+-------------+---------------+-----------+---------+-------+------ +-----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------------+---------------+-----------+---------+-------+------ +-----------------------+
| 1 | SIMPLE | t100 | ref_or_null | t1oo_idx1 | t1oo_idx1 | 5 | const | 2 | Using index condition |
+----+-------------+-------+-------------+---------------+-----------+---------+-------+------ +-----------------------+
1 row in set (0.00 sec) 优化器可以处理 IS NULL 对于任何索引部分

8.2.1.8 IS NULL Optimization NULL 优化:的更多相关文章

  1. 数据库中is null(is not null)与=null(!=null)的区别

    在标准SQL语言(ANIS SQL)SQL-92规定的Null值的比较取值结果都为False,既Null=Null取值也是False.NULL在这里是一种未知值,千变万化的变量,不是“空”这一个定值! ...

  2. mysql中NULL和null的区别

    接触php的web开发一段时间了,在进行数据库操作的时候经常会遇到一个问题,使得同一字段在页面显示时有3种类型NULL,null以及数字,当时的解决办法是将这一字段定义为varchar类型,在插入数据 ...

  3. json-lib 中关于null与"null"

    总感觉json-lib里面关于null和"null"的处理非常不合理,或者说是bug,去了json-lib的网站,最后一次更新是10年了... 发现官方网站第一段就说json-li ...

  4. Difference between 2>&-, 2>/dev/null, |&, &>/dev/null and >/dev/null 2>&1

    Reference link: http://unix.stackexchange.com/questions/70963/difference-between-2-2-dev-null-dev-nu ...

  5. 【网络收集】MySql中IS NOT NULL与!=NULL的区别

    在mysql中,筛选非空的时候经常会用到is not null和!=null,这两种方法单从字面上来看感觉是差不多的,其实如果去运行一下试试的话差别会很大!为什么会出现这种情况呢?null 表示什么也 ...

  6. Mysql 中is null 和 =null 的区别

    在mysql中,筛选非空的时候经常会用到is not null和!=null,这两种方法单从字面上来看感觉是差不多的,其实如 果去运行一下试试的话差别会很大! 为什么会出现这种情况呢? null 表示 ...

  7. MySQL timestamp NOT NULL插入NULL的问题

    explicit_defaults_for_timestamp MySQL 5.6版本引入 explicit_defaults_for_timestamp 来控制对timestamp NULL值的处理 ...

  8. ORA-20002: [WF_NO_USER] NAME=<name> ORIG_SYSTEM=NULL ORIG_SYSTEM_ID=NULL

    Solution APPLIES TO: Identity Manager Connector - Version 10.1.2 to 10.1.2Oracle User Management - V ...

  9. is null 和=null的区别

    数据库中 null 表示 不可知,不确定 所以 判断都用 字段 is null的方式进行判断 而 = null .<> null 的判断结果,仍然是不可知,不确定,所以 不会返回任何结果. ...

随机推荐

  1. <Win32_8>由浅入深——滚动条

    滚动条在Win32程序中是非常常见的一个控件,它的功能和地位也就不言而喻了,在文本输出中算是一个难点…… 我将借用P先生的思路讲述两种不同风格滚动条,下面切入主题:(实例程序都是显示一张位图  当然, ...

  2. ViewPager 详解(四)----自主实现滑动指示条

    前言:前面我们用了三篇的时间讲述了有关ViewPager的基础知识,到这篇就要进入点实际的了.在第三篇<ViewPager 详解(三)---PagerTabStrip与PagerTitleStr ...

  3. Apache配置HTTPS协议搭载SSl配置全过程

    1.首先要开启相应的扩展和辅助的dll(ssleay32.dll,libeay32.dll)到system32下 2.生成服务器证书 安装好在bin目录下有一个openssl.exe文件,用来生成证书 ...

  4. GCC编译选项

    一.看例子分析gcc 的编译选项 gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld 1.-I /home/h ...

  5. Java基础知识强化之IO流笔记02:try...catch的方式处理异常

    1. 案例示例: package com.himi.trycatch; public class ExceptionDemo { public static void main(String[] ar ...

  6. 关于js跨域

    get方式: 称为jsonp,就是js的跨域通信方式,因为知道有些标签可以跨域获取内容,例如img,script,link...,jsonp就是把动态创建一个script标签,然后配置src属性,后台 ...

  7. DBMS_STATS常用方法(收集oracle信息)

    –收集数据库信息EXEC DBMS_STATS.gather_database_stats;EXEC DBMS_STATS.gather_database_stats(estimate_percent ...

  8. 一条insert语句批量插入多条记录

    一条insert语句批量插入多条记录 常见的insert语句,向数据库中,一条语句只能插入一条数据: insert into persons (id_p, lastname , firstName,  ...

  9. PHP 错误处理

    PHP 错误处理 在 PHP 中,默认的错误处理很简单.一条错误消息会被发送到浏览器,这条消息带有文件名.行号以及描述错误的消息. PHP 错误处理 在创建脚本和 Web 应用程序时,错误处理是一个重 ...

  10. 使用nw.js将html项目打包为桌面程序

    首先需要确保电脑已经布置好node.js环境 1.下载并全局安装nw.js npm install nw -g 2.安装nw-builder模块 npm install nw-builder -g 3 ...