iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql中怎么避免使用null定义字段的原因是什么
  • 560
分享到

mysql中怎么避免使用null定义字段的原因是什么

2023-06-20 18:06:38 560人浏览 安东尼
摘要

本篇文章给大家分享的是有关mysql中怎么避免使用null定义字段的原因是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一 NULL 为什么这么经常用(1) java的nu

本篇文章给大家分享的是有关mysql中怎么避免使用null定义字段的原因是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一 NULL 为什么这么经常用

(1) java的null

null是一个让人头疼的问题,比如java中的NullPointerException。为了避免猝不及防的空指针,需要小心翼翼地各种if判断,麻烦又臃肿.

为此有很多的开源包都有诸多处理

common lang3的StringUtils.isBlank(); CollectionUtils.isEmpty();

guava的Optional

甚至java8也引入了Optional来避免这一问题(和guava的大同小异,用法稍有一点点变化)

(2) Mysql的null为什么横行滥用

(a) 创建不规范 null是创建数据表时候默认的,一些mysql客户端的自动生成表语句里面可能也没有not null的指定。

(b) 错误认识 会有人觉得not null需要更多的空间

(c) 图省事 null在开发中不用判断插入数据,写sql更方便

二 官方文档

NULL columns require additional space in the rowto record whether their values are NULL. For MyISAM tables, each NULL columntakes one bit extra, rounded up to the nearest byte.

Mysql难以优化引用可空列查询,它会使索引、索引统计和值更加复杂。可空列需要更多的存储空间,还需要mysql内部进行特殊处理。可空列被索引后,每条记录都需要一个额外的字节,还能导致MYisam 中固定大小的索引变成可变大小的索引。 —— 出自《高性能mysql第二版》

如此看来,不指定not null并没有性能上的优势。

三 mysql不用null的理由

(1)所有使用NULL值的情况,都可以通过一个有意义的值的表示,这样有利于代码的可读性和可维护性,并能从约束上增强业务数据的规范性。

(2)NULL值到非NULL的更新无法做到原地更新,更容易发生索引分裂,从而影响性能。(null -> not null性能提升很小,除非确定它带来了问题,否则不要当成优先的优化措施)

(3)NULL值在timestamp类型下容易出问题,特别是没有启用参数explicit_defaults_for_timestamp

(4)NOT IN、!= 等负向条件查询在有 NULL 值的情况下返回永远为空结果,查询容易出错

四 null引发的bad case

数据初始化:

create table table1 (    `id` INT (11) NOT NULL,    `name` varchar(20) NOT NULL)create table table2 (    `id` INT (11) NOT NULL,    `name`  varchar(20))insert into table1 values (4,"zhaoyun"),(2,"zhangfei"),(3,"liubei")insert into table2 values (1,"zhaoyun"),(2, null)

(1)NOT IN子查询在有NULL值的情况下返回永远为空结果,查询容易出错

select name from table1 where name not in (select name from table2 where id!=1)

+-------------+|      name   ||-------------|+-------------+

(2) 列值允许为空,索引不存储null值,结果集中不会包含这些记录。

select * from table2 where name != 'zhaoyun'

+------+-------------+|   id |      name   ||------+-------------||      |             |+------+-------------+

select * from table2 where name != 'zhaoyun1'

+------+-------------+|   id |      name   ||------+-------------||   1  |  zhaoyun    |+------+-------------+

(3) 使用concat拼接时,首先要对各个字段进行非null判断,否则只要任何一个字段为空都会造成拼接的结果为null

select concat("1", null) from dual;

+--------------------+|   concat("1", null)||--------------------||               NULL |+--------------------+

(4) 当计算count时候null column不会计入统计

select count(name) from table2;

+--------------------+|   count(user_name) ||--------------------||                  1 |+--------------------+

五 索引长度对比

alter table table1 add index idx_name (name);alter table table2 add index idx_name (name);explain select * from table1 where name='zhaoyun';explain select * from table2 where name='zhaoyun';

table1的key_len = 82

table2的key_len = 83

key_len 的计算规则和三个因素有关:数据类型、字符编码、是否为 NULL

key_len 82 = 20 * 4(utf8mb4 - 4字节, utf8 - 3字节) + 2(存储varchar变长字符长度为2字节,定长字段无需额外的字节)

key_len 83 = 20 * 4(utf8mb4 - 4字节, utf8 - 3字节) + 2(存储varchar变长字符长度为2字节,定长字段无需额外的字节) + 1(是否为null的标志)

所以说索引字段最好不要为NULL,因为NULL会使索引、索引统计和值更加复杂,并且需要额外一个字节的存储空间。

以上就是mysql中怎么避免使用null定义字段的原因是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: mysql中怎么避免使用null定义字段的原因是什么

本文链接: https://www.lsjlt.com/news/298836.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql中怎么避免使用null定义字段的原因是什么
    本篇文章给大家分享的是有关mysql中怎么避免使用null定义字段的原因是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一 NULL 为什么这么经常用(1) java的nu...
    99+
    2023-06-20
  • Java避免使用finalizer和Cleaner的原因是什么
    这篇文章主要介绍了Java避免使用finalizer和Cleaner的原因是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java9之前finalizer,java9使用...
    99+
    2023-06-14
  • C#访问null字段会抛异常的原因是什么
    这篇文章主要介绍“C#访问null字段会抛异常的原因是什么”,在日常操作中,相信很多人在C#访问null字段会抛异常的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#访问null字段会抛异常的原因...
    99+
    2023-07-02
  • php中要定义字符串的原因是什么
    小编给大家分享一下php中要定义字符串的原因是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在PHP语言中声明字符串有三种方式:1:用单引号声明2:用双引号声明3:用字界符声明1:对于单引号声明用英文半角的单引号,将字...
    99+
    2023-06-15
  • mysql自定义字段的方法是什么
    在MySQL中,可以通过以下两种方法来自定义字段:1. 使用计算字段:- 计算字段是使用表中已有字段计算出来的结果。可以使用算术运算...
    99+
    2023-09-25
    mysql
  • 为什么mysql字段要使用NOT NULL
    最近刚入职新公司,发现数据库设计有点小问题,数据库字段很多没有NOT NULL,对于强迫症晚期患者来说,简直难以忍受,因此有了这篇文章。 基于目前大部分的开发现状来说,我们都会把字段...
    99+
    2024-04-02
  • PHP float不准的原因是什么及怎么避免
    今天小编给大家分享一下PHP float不准的原因是什么及怎么避免的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、为什么f...
    99+
    2023-07-05
  • 避免async await的使用及原理是什么
    这篇文章主要讲解了“避免async await的使用及原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“避免async await的使用及原理是什么”吧!谎言和as...
    99+
    2023-07-02
  • PHP中要使用转义符的原因是什么
    这篇文章主要介绍“PHP中要使用转义符的原因是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP中要使用转义符的原因是什么”文章能帮助大家解决问题。一、概念解释在 PHP 中,转义符是一个反斜...
    99+
    2023-07-05
  • 怎么避免在Vue中使用null作为class的空值
    本篇内容主要讲解“怎么避免在Vue中使用null作为class的空值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么避免在Vue中使用null作为class的...
    99+
    2024-04-02
  • MySQL中数据表及字段含义是什么
    这篇文章给大家介绍MySQL中数据表及字段含义是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、本系统字段含义  用量是指一个单位的母件,要多少个单位的子件组成,如1PCS的B2...
    99+
    2024-04-02
  • C++中函数重载定义与原因是什么
    小编给大家分享一下C++中函数重载定义与原因是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!引例如果要求你只能通过print函数,即能打印字符串,又能打印一个整型。虽然在C语言中我们可以通过 print_i 和prin...
    99+
    2023-06-29
  • html中段落是怎么定义的
    这篇“html中段落是怎么定义的”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“html中段落是怎么定义的”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入主题...
    99+
    2023-06-06
  • MySQL中不使用Text类型的原因是什么
    MySQL中不使用Text类型的原因是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。众所周知,MySQL广泛应用于互联网的OLTP(联机事...
    99+
    2024-04-02
  • MySQL中不建议使用SELECT *的原因是什么
    本篇内容介绍了“MySQL中不建议使用SELECT *的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!“不要使用...
    99+
    2023-06-29
  • mysql中的字段选择是什么
    这篇文章主要讲解了“mysql中的字段选择是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql中的字段选择是什么”吧!说明根据实际需要,明确所需字段名称,用英文逗号分隔。获取所有字...
    99+
    2023-06-20
  • react中使用node的原因是什么
    这篇文章主要讲解了“react中使用node的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react中使用node的原因是什么”吧! ...
    99+
    2024-04-02
  • sql中判断字段为null或空的方法是什么
    在SQL中,可以使用以下方法来判断字段是否为NULL或空:1. 使用IS NULL操作符来判断字段是否为NULL。例如:SELEC&...
    99+
    2023-10-08
    sql
  • mysql中set null的用法是什么
    在MySQL中,SET NULL用于将列的值设置为NULL。这通常用于更新或插入记录时,将某个列的值设置为NULL。例如,可以使用以...
    99+
    2024-04-09
    mysql
  • 免费IP不能用的原因是什么
    这篇文章主要讲解了“免费IP不能用的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“免费IP不能用的原因是什么”吧!1、免费代理IP可用性低。2、免费的代理IP,使用起来比较麻烦。选...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作