MySQL可以对可以结合col_name = constant_value使用的col_name IS NULL进行相同的优化。例如,MySQL可以使用索引和范围用IS NULL搜索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子句包括声明为NOT NULL的列的col_name IS NULL条件,表达式则优化。当列会产生NULL时,不会进行优化;例如,如果来自LEFT JOIN右侧的表。

MySQL也可以优化组合col_name = expr AND col_name IS NULL,这是解决子查询的一种常用形式。当使用优化时EXPLAIN显示ref_or_null。

该优化可以为任何关键元素处理IS NULL。

下面是一些优化的查询例子,假定表t2的列a和b有一个索引:

SELECT * FROM t1 WHERE t1.a=expr OR t1.a IS NULL;

SELECT * FROM t1, t2 WHERE t1.a=t2.a OR t2.a IS NULL;

SELECT * FROM t1, t2 WHERE (t1.a=t2.a OR t2.a IS NULL) AND t2.b=t1.b;

SELECT * FROM t1, t2 WHERE t1.a=t2.a AND (t2.b=t1.b OR t2.b IS NULL);

SELECT * FROM t1, t2 WHERE (t1.a=t2.a AND t2.a IS NULL AND ...) OR (t1.a=t2.a AND t2.a IS NULL AND ...);

ref_or_null首先读取参考关键字,然后单独搜索NULL关键字的行。

请注意该优化只可以处理一个IS NULL。在后面的查询中,MySQL只对表达式(t1.a=t2.a AND t2.a IS NULL)使用关键字查询,不能使用b的关键元素:

SELECT * FROM t1, t2 WHERE (t1.a=t2.a AND t2.a IS NULL) OR (t1.b=t2.b AND t2.b IS NULL);

mysql null 优化_MySQL如何优化IS NULL?相关推荐

  1. mysql的索引优化_MySQL索引优化与分析(重要)

    建表SQL CREATE TABLE staffs ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR (24) NULL DEFAULT '' COM ...

  2. mysql not in优化_MySQL性能优化 — 实践篇2

    点赞再看,养成习惯,微信搜一搜[一角钱小助手]关注更多原创技术文章.本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 MySQL索引底层数据结构与算法 ...

  3. mysql 字符串索引 优化_MySQL性能优化之索引调优实战

    索引失效场景或使用注意事项 a.索引无法存储null值,所以建议都给默认值 b.如果条件中有or,即使使用了索引条件也不起作用,所以尽量少用or 如果想使用or,又让索引生效,只能将or的每个列上加上 ...

  4. mysql 阿里云 优化_MySQL性能优化速记

    总结自<MySQL 5.7从入门到精通(视频教学版)>刘增杰编著. 优化简介 MySQL数据库优化是多方面的,原则是减少系统的瓶颈,减少资源的占用,增加系统的反应速度. 在MySQL中,可 ...

  5. 物联网 mysql数据库优化_MySQL数据库优化大全方法汇总-阿里云开发者社区

    随着数据和负载增加,MySQL数据库会日渐缓慢,性能越来越差,用户体验也随之变差,所以数据库性能优化十分紧迫,云吞铺子分享MySQL数据库优化大全: MySQL数据库优化 云吞铺子先模拟一下数据库访问 ...

  6. 熟悉mysql数据库设计和性能优化_MySQL性能优化学习笔记-(1)数据库设计

    一.数据库设计 1.数据类型优缺点分析 数据类型的选择要遵循的总体原则 更小的通常更好 一般情况下,应该尽量选择使用可以正确存储数据的最小数据类型.更小的数据类型通常更快,因为它们站用更小的磁盘.内存 ...

  7. mysql locate索引_MYSQL索引优化

    1.查看sql的执行频率 MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息.show [session|global] stat ...

  8. 下列有关mysql数据库中的null值_MySQL数据库中与 NULL值有关的问题

    对于SQL的新手,NULL值的概念常常会造成混淆,他们常认为NULL是与空字符串"相同的事.情况并非如此.例如,下述语句是完全不同的: mysql> INSERT INTO my_ta ...

  9. mysql numeric 空值_mysql数据库不能添加NULL值,该怎么解决 - numeric

    ...持许多种不同的数值型数据.你可以存储整数 INT .小数 NUMERIC.和钱数 MONEY.INT VS SMALLINT VS TINYINT 他们的区别只是字符长度: INT型数据的表数范 ...

最新文章

  1. Transforms CTM, 转换矩阵
  2. 李开复:为什么我认为“AI+”有四阶段
  3. Node.js v8.0.0 带来了哪些主要新特性
  4. 2011年7个最佳的Linux发行版
  5. 模板:SharePoint2007解决方案包
  6. pycharm 如何搜索?Ctrl+N 搜索py文件 Ctrl+shift+N 搜索所有类型的文件 ctrl+shift+f 全局字符串搜索 ctrl+shift+a 配置项搜索 双shift全局
  7. 《信息学奥赛一本通》 高精度减法。输入两个正整数,求它们的差。
  8. 【最简代码】1076 Wifi密码 (15分)_8行代码AC
  9. gradle docker_带有Gradle的Docker容器分为4个步骤
  10. [react] 解释下react中component和pureComponent两者的区别是什么?
  11. docker mysql 漂移_Centos7系统Docker环境下Mysql部署
  12. centos7安装python3.6独立的virtualenv环境
  13. 拓端tecdat|Python支持向量回归SVR拟合、预测回归数据和可视化准确性检查实例
  14. qq2018旧版本7.3.1下载_qq下载2020最新版下载安装-qq2020最新版下载V8.4.8-西西软件下载...
  15. 实例!AGV与MES对接的智能仓储系统设计
  16. Python flask web基础(三)用wangeditor实现富文本编辑
  17. 数字基础设施可视化管理,任重而道远
  18. 如何截取网易云音乐的歌曲
  19. 计算机世界英语作文,计算机(Computers)
  20. win10计算机右键属性打不开,右键电脑属性打不开|解决win10系统我的电脑属性打不开...

热门文章

  1. 用工具激活visio2013
  2. Unable to resolve target 'android-7'
  3. 计算机系统启动的加点顺序是,操作系统引导探究
  4. 局域网访问提示无法访问检查拼写_关于海康视频监控异地访问设置一些细节的说明...
  5. 半径为r的均匀带电球体_一半径为R的均匀带电球体,其电荷的体密度为ρ.求(1)球外任一点的电势;(2)球表面上的电势;(3...
  6. python学习if语句_python学习之if语句
  7. java json解码器_Jackson:我是最牛掰的 Java JSON 解析器(有点虚)
  8. centos7 文本编辑 不能移动光标_【200905】Linux系统的使用基础(CentOS 7)
  9. JAVA中如何取map的值_如何在java中取map中的键值 的两种方法
  10. BUUCTF Web [ACTF2020 新生赛]Exec