美文网首页
数据库设计mysql字段不默认为NULL原因搜集

数据库设计mysql字段不默认为NULL原因搜集

作者: 十年磨一剑1111 | 来源:发表于2021-03-21 16:00 被阅读0次

相信很多人在设计数据库的时候都会遵循一个原则: 字段尽量不要使用NULL,但是对其背后的原因却了解的比较少,笔者也是一样的。下面笔者收集了一些关于它的原因。

  1. 如果sql 语句是一个不等于的查询,那么值为NULL的列将不会被查出,例如:
    select * from user where name != '张山';
    如果name 列有为空的值,那么name=null 的记录将查不出来。
  2. MySQL NULL 值其实是占用空间的,注意NULL值和空值是不一样的。借用官方的一段话:
    “NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.”
  3. 程序很少说要使用到NULL的值,如果查出为NULL的值,反倒要做一些特殊的处理。
  4. 有的时候判断字段是否为NULL和是否不为NULL将会使得索引失效,例如这样一张表:


    表.png

    在字段name 上加有一个index 索引,下面来分析一条sql语句:
    EXPLAIN SELECT * FROM user_login_log WHERE NAME IS NULL;
    执行结果:


    结果.png

从explain 的结果来看这里这里并没有走索引。下面笔者再删除几条记录看下结果:


表.png

同样的sql语句,这里就不重复写了,下面直接来看分析结果:


结果.png
发现这个时候使用到了索引,为啥会这样呢? 其实查询优化器会去判断到底是走索引快还是扫表快,那种更快就使用哪个。
  1. 其实设置为非NULL带来的效率提升是很小的,除非真的确定是NULL带来了性能的问题,否则优化的时候一般不会去加个not null ,不过建议各位小伙伴在数据库设计之初的时候就字段尽量设置为非NULL。

相关文章

  • 数据库设计mysql字段不默认为NULL原因搜集

    相信很多人在设计数据库的时候都会遵循一个原则: 字段尽量不要使用NULL,但是对其背后的原因却了解的比较少,笔者也...

  • mysql null

    mysql创建表时,字段不特别指明不为空,默认为NULL。 如果某个字段允许NULL,插入数据时,没有插入这个字段...

  • 12.字段选项

    [TOC] null(空值) 如果设置为True, 不填写该字段时存储NULL到数据库中默认为False 字符串类...

  • 数据库的优化

    优化MYSQL数据库的方法1、选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如'...

  • 数据库空值问题

    长久以来,不同的数据库设计人员在设计表字段时,有的设计字段允许为NULL,有的设置了默认值(不允许字段中出现NUL...

  • 排查修复MySQL中判断某个字段的值是否为NULL出现的异常问题

    问题 在使用MySQL数据库时,判断某个字段的值是否为NULL的时候出现以下问题:使用 field == NULL...

  • MySQL-11数据库设计

    大家好,这一篇主要围绕三个特点记录。 mysql数据库设计 数据库设计三大范式 数据库表字段类型分析 不推荐存储的...

  • Mysql 规范

    Mysql 规范 数据库命名规范总结 数据库基本设计规范 索引设计规范 数据库字段设计规范 数据库SQL开发规范 ...

  • Mysql的NULL和空字符串

    1.插入NULL不一定为NULLNULL是一个比较特殊的字段。在MySQL数据库中,在不同的情形下,NULL往往代...

  • mysql时间字段创建索引和不创建索引查询性能分析

    在数据库设计的时候,我们经常会需要设计时间字段,在MYSQL中,时间字段可以使用int、timestamp、dat...

网友评论

      本文标题:数据库设计mysql字段不默认为NULL原因搜集

      本文链接:https://www.haomeiwen.com/subject/jhnncltx.html