MySQL中NULL对索引的影响深入讲解

 更新时间:2019年07月04日 10:06:42   作者:CayChan  
这篇文章主要给大家介绍了关于MySQL中NULL对索引的影响的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

看了很多博客,也听过很多人说,包括我们公司的DBA,说MySql中如果某一列中含有null,那么包含该列的索引就无效了。

翻了下《高性能MySQL第二版》和《MySQL技术内幕——InnoDB存储引擎第2版》,并没有看到关于这个的介绍。但在本地试了下,null列是可以用到索引的,不管是单列索引还是联合索引,但仅限于is null,is not null是不走索引的。

后来在官方文档中找到了说明,如果某列字段中包含null,确实是可以使用索引的,地址:https://dev.mysql.com/doc/refman/5.7/en/is-null-optimization.html。

在mysql5.6和5.7下均可,存储引擎为InnoDB。

数据如下:

1. 单列索引

给name列建单列索引:

查询name为null的行:

查询name为'test0'或为null的行:

可以发现都可以用到索引。

2. 联合索引

给age和name添加联合索引:


查询age为14并且name为null的行:

可以发现同样用到了索引。

3. 其他

虽然MySQL可以在含有null的列上使用索引,但不代表null和其他数据在索引中是一样的。

不建议列上允许为空。最好限制not null,并设置一个默认值,比如0和''空字符串等,如果是datetime类型,可以设置成'1970-01-01 00:00:00'这样的特殊值。

对MySQL来说,null是一个特殊的值,Conceptually, NULL means “a missing unknown value” and it is treated somewhat differently from other values。比如:不能使用=,<,>这样的运算符,对null做算术运算的结果都是null,count时不会包括null行等,null比空字符串需要更多的存储空间等。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • MySql模糊查询json关键字检索方案示例

    MySql模糊查询json关键字检索方案示例

    大家好,本篇文章主要讲的是MySql模糊查询json关键字检索方案示例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下哦,方便下次浏览
    2021-12-12
  • 详解MySQL中UNION的用法

    详解MySQL中UNION的用法

    这篇文章主要介绍了详解MySQL中UNION的用法,是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • 解决Mysql 8.0.17 winx64版本安装过程中遇到的问题

    解决Mysql 8.0.17 winx64版本安装过程中遇到的问题

    这篇文章主要介绍了Mysql 8.0.17 winx64版本安装过程中遇到的问题 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • 深入理解mysql之left join 使用详解

    深入理解mysql之left join 使用详解

    即使你认为自己已对 MySQL 的 LEFT JOIN 理解深刻,但我敢打赌,这篇文章肯定能让你学会点东西
    2012-09-09
  • gearman + mysql方式实现持久化操作示例

    gearman + mysql方式实现持久化操作示例

    这篇文章主要介绍了gearman + mysql方式实现持久化操作,简单描述了持久化的概念、原理,并结合实例形式分析了gearman + mysql持久化操作相关实现技巧,需要的朋友可以参考下
    2020-02-02
  • mysql利用覆盖索引避免回表优化查询

    mysql利用覆盖索引避免回表优化查询

    这篇文章主要给大家介绍了关于mysql如何利用覆盖索引避免回表优化查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • MySQL数据库优化技术之索引使用技巧总结

    MySQL数据库优化技术之索引使用技巧总结

    这篇文章主要介绍了MySQL数据库优化技术之索引使用方法,结合实例形式总结分析了MySQL表的优化、索引设置、SQL优化等相关技巧,非常具有实用价值,需要的朋友可以参考下
    2016-07-07
  • mysql server 5.5连接不上的解决方法

    mysql server 5.5连接不上的解决方法

    这篇文章主要为大家详细介绍了mysql server 5.5连接不上的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • MySQL数据库如何开启远程连接(多备份)

    MySQL数据库如何开启远程连接(多备份)

    多备份服务器在备份你的数据库时,必须能够远程连接上你的数据库。但是一般来说mysql安装时都是关闭远程连接的,因此,需要你开通mysql数据库的远程访问权限。那么如何开启呢
    2015-01-01
  • win10 下安装mysql服务器社区版本mysql 5.7.22 winx64的图文教程

    win10 下安装mysql服务器社区版本mysql 5.7.22 winx64的图文教程

    这篇文章主要介绍了win10 下安装mysql服务器社区版本mysql 5.7.22 winx64的图文教程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-05-05

最新评论