Mysql数据类型设计思考

一、Mysql数据类型设计规范

1.1 选择更小的数据类型

一般情况下,在满足存储要求的基础上,尽量选择小的存储类型。例如:存储0~200,tinyint和bigint都可以存储,那么选择tinyint。原因:越小的数据类型运算速度更快,占用磁盘、内存以及CPU缓存更小

1.2 简单更好

简单的数据类型意味着操作需要更少的CPU周期。例如:整型比字符操作代价要小很多,因此字符集和排序规则使得字符比整型更加复杂。

1.3 避免使用NULL值

虽然NULL值也可以走索引,但对索引统计值比较逻辑以及内存使用等不太友好。
索引统计: 由于Mysql在执行查询优化时,会基于索引统计信息来选择最优的执行计划。当列中包含null值时,因null值不参与统计,会对执行计划产生影响,导致选择的执行计划不是最优的;
值比较逻辑: 对null值的操作只能使用is null, is not null,<=>,因此在进行范围查询或等值比较时,需要进行额外的处理;

选择步骤:

  1. 选择合适的大类型。比如:整型,字符串或时间
  2. 选择具体的小类型。比如:tinyint,bigint, datetime, timestamp等。

二、各种数据类型使用场景解析

2.1 整数和小数类型

2.1.1 整数

类型:tinyint, smallint, mediumint, int, bigint.分别占用1,2,3,4,8个字节的空间;
是否支持负数:支持
特点:
	1.默认是有符号。有unsigned【无符号】属性可以选择。加上unsigned意味着只能是正数,表示范围扩大一倍;
	2.有符号和无符号存储空间是相同的;
	3.int(n)int(m)存储空间是一样的,只不过显示宽度不一样而已.

2.1.2 小数

Mysql既支持精确类型,也支持不精确类型

精确类型:floatdouble
	- 使用标准的浮点运算进行【近似计算】
	- 适用于不需要精准计算的场景
不精确类型:decimal
	- 用于存储精确的小数
	- 适用于需要精准计算的场景。一般用于存储金额,但在大数据量情况下,可以将金额换算成分,存储到bigint里,解决浮点存储计算不精确和decimal精确计算代价高的问题。

decimal也有正负之分,通过unsigned来设置。decimal的格式为:decimal(P,D)
P: 表示有效数字位的精度。范围为1-65
D:表示小数点后的位数。范围为0-30Mysql要求D小于等于P

Decimal的存储:
在这里插入图片描述

2.2 字符串类型

char和varchar

char和varchar的区别:
前提:假设每个字符占用4个字节

  1. 存储方式:
    • char是定长字符串。当为char指定一个长度M时,会使用固定长度4M的空间来存储数据;
    • varchar是变长字符串。使用可变长度【实际字符串长度+存储字符串长度的空间】的空间来存储数据
  2. 使用场景
    • char更适合固定长度的字符串存储;
    • varchar更适合存储不定长度的字符串
varchar(10)场景下:"hh""hhh"占用多个字节?
	"hh": 2个字符 * 48个字节,由于8小于255,1个字节来存储字符串的长度,因此总体为9个字节
	"hhh": 3个字符 * 412个字节,由于12小于255,1个字节来存储字符串的长度,因此总体为13个字节

varchar(6)varchar(10)的区别:存储同样的字符串"hello"
1. 占用的磁盘空间大小是一样的。都是5个字符*4 + 1 = 21个字节;
2. 占用的内存空间不一样。MySQL通常会分配【固定大小的内存块】来保存内部值。尤其是使用临时表进行排序会操作时,会消耗更多的内存。在使用磁盘进行排序时,也是一样

blob和text:

两者都是为了存储大数据设计的字符串类型。blob采用二进制存储,text采用字符存储.
Mysql为了存储blob和text,专门分配存储区域来存储,然后在B+树上使用1-4字节的内存指针,指向存储区域。

2.3 时间类型

目前常用的两种时间格式为:datetime和timestamp。Mysql目前仅支持到毫秒级别的存储。

DateTime: 
	- 范围:1001-9999
	- 精度:秒
	- 与时区无关
	- 8字节存储
TimeStamp:
	- 范围:1970-2038
	- 精度:秒
	- 与时区有关
	- 4字节存储

使用场景:
1. 为时间创建索引或精确到毫秒:将时间转换为bigint类型存储,方便索引;
2. 对内存敏感的场景:使用TimeStamp
3. 对内存不敏感的场景:使用DateTime

其它数据类型用的比较少,如果要使用的话,可以查阅相关的资料即可。

三、Null值设计思考

建议:建表时,尽量不要将字段设置为null,给字段设置一个默认值

3.1 null生效和不生效情况

不生效情况查询运算符、like、between and、in、not in对null查询不生效
生效情况is null,is not null,<=>(安全等于,既可以判断null值,也可以判断普通数值,可读性差,不建议使用)

3.2 聚合函数和null值的结合

count(字段): 不会统计为null的数据;
count(*): 会统计为null的数据

3.3 null值和主键的结合

当字段设置为主键时,字段会自动被设置为not null

3.4 null值存储在B+树的哪里

考虑到主键不能为null,因此允许null值创建的索引都是非聚簇索引。设计Innodb的大叔定义Null值大小为最小的:
We define the SQL null to be the smallest possible value of a field.
因此,null值索引在B+树中的位置,应该是最靠近左边的。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/621600.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【项目】Boost搜索引擎

项目相关背景 现在市面上已经出现很多搜索引擎&#xff0c;比如&#xff1a;百度、Google、Bing等等&#xff0c;它们都是全网性搜索 而我做得项目就像cplusplus网站中搜索C的相关知识一样&#xff0c;同样做的是站内搜索&#xff0c;它的搜索更垂直。 搜索引擎的宏观原理 ser…

模型 洋葱模型(组织管理方向)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。层层深入&#xff0c;探索核心。 1 洋葱模型的应用 1.1 洋葱模型用于职业规划 有一个名叫李明的大学生&#xff0c;他最近感到迷茫和压力&#xff0c;因为他即将毕业并面临职业选择。李明决定寻求心…

Java中55种锁,高级面试题,最新面试题

Java中乐观锁在实际应用中如何解决并发问题&#xff1f; 乐观锁通过假设并发冲突发生概率较低来解决并发问题&#xff0c;主要通过数据版本控制实现。在更新数据前&#xff0c;会检查数据版本是否发生变化&#xff0c;只有在数据版本未变时才允许更新&#xff0c;这样可以避免…

uos server 无法通过ssh工具连接

问题现象 uos server 服务器操作系统 在虚拟机中安装好之后&#xff0c;防火墙已经关闭&#xff0c;ssh服务已经启动&#xff0c;但通过finalshell等ssh工具连接报错 &#xff1a;java.net.ConnectException: Connection timed out: connect 经过确认 防火墙已关&#xff0c;s…

计算机毕业设计springboot体育馆场地预约管理系统【附源码】

计算机毕业设计springboot体育馆场地预约管理系统[附源码] &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制…

人工智能生成图像的兴起:区分事实与虚构

人工智能生成图像的兴起&#xff1a;区分事实与虚构 概述 在人工智能 (AI) 已融入我们日常生活的时代&#xff0c;人工智能生成图像的快速发展引发了人们对数字内容真实性的担忧。最近&#xff0c;人工智能生成的图像甚至欺骗了最敏锐的眼睛&#xff0c;这引发了人们对批判性…

@游戏行业er!MongoDB广州线下沙龙邀您报名!

随着游戏和应用程序的发展&#xff0c;数据变得越来越重要。在为您的下一个游戏选择数据库时&#xff0c;数据库管理者常常会面对灵活性、可扩展性、可靠性、运营效率等问题或挑战。 MongoDB在游戏开发领域有着广泛的应用&#xff0c;灵活数据模型可以存储和处理各种类型的数据…

OPT系列极速版远距离光数据传输器|光通讯传感器安装与调试方法

OPT系列极速版远距离光数据传输器|光通讯传感器使用红外激光通信&#xff0c;满足全双工 100M 带宽&#xff0c;通讯距离可达 300 米。能够快速&#xff0c;稳地传送数据&#xff0c;支持主流的工业控制总线&#xff08;Profinet&#xff0c;Ethercat 等&#xff09;&#xff1…

媒体宣发:多元宣发方式的方式有哪些

在信息爆炸的今天&#xff0c;媒体宣发被广泛地运用在各个领域&#xff0c;对于产品宣传、企业形象塑造等都起着至关重要的作用。多样化的媒体宣发方式越来越受到企业的重视&#xff0c;那么常见的媒体宣发方式有哪些呢&#xff1f; 首先&#xff0c;新闻发布是最传统也是最直…

SQLStringInFo SQL 数据库操作语句的解析器!!!

SQLStringInFo 开源技术栏 SQLStringInFo是一个专注于sql命令语句解析的sql命令解析库&#xff0c;在库中提供了有关SQL命令语法的解析器&#xff0c;通过该库&#xff0c;可以实现快速准确的SQL语句分析处理。 介绍 SQLStringInFo是一个专注于sql命令语句解析的sql命令解析…

形位公差Overview of GDT

零件公差产生于十九世纪后期&#xff0c;其初衷是为了保证零件的互换性。起初只有尺寸公差。由于 当时的设计部门和制造部门通常都在一起或就在隔壁&#xff0c;因此交流起来非常方便。在当时&#xff0c;给 定的公差一般都很大&#xff0c;因此当时的设备刀具的能力对于保证产…

1.基本概念,半导体基础

1.电压降&#xff1a; 指电流通过阻抗负载时的电位降的大小。&#xff08;线段或部件两端的电压&#xff09;。 2.数量较多的载流子称为多子 3.二极管和稳压管 4.习题

合专家模型 (MoE) 详解

本文转载自&#xff1a;混合专家模型 (MoE) 详解 https://huggingface.co/blog/zh/moe 英文版&#xff1a;https://huggingface.co/blog/moe 文章目录 一、简短总结二、什么是混合专家模型&#xff1f;三、混合专家模型简史四、什么是稀疏性?五、混合专家模型中令牌的负载均衡…

2024中国(重庆)航空航天暨无人机低空经济展览会

2024中国&#xff08;重庆&#xff09;航空航天暨无人机低空经济展览会 邀请函 组织机构 主办单位: 中国航空学会 重庆市南岸区人民政府 招商执行单位&#xff1a; 重庆港华展览有限公司 展会概括∶ 2024中国航空航天暨无人机低空经济展览会将于2024年8月23-25日在重庆…

基于C#开发web网页模板流程-登录界面

前言&#xff0c;首先介绍一下本项目将要实现的功能 &#xff08;一&#xff09;登录界面 实现一个不算特别美观的登录窗口&#xff0c;当然这一步跟开发者本身的设计美学相关&#xff0c;像蒟蒻博主就没啥艺术细胞&#xff0c;勉强能用能看就行…… &#xff08;二&#xff09…

2024期从、证从、基从、银从备考资料及互助交流群

快进&#xff0c;2024年 金融考证备考资料及互助交流备考群&#xff0c;考啥进啥 5.12 &#xff08;基从&#xff09;基金从业资格考试 5.18&#xff08;期从&#xff09;期货从业资格考试 6.1 &#xff08;证从&#xff09;证券从业资格考试 6.1&#xff5e;6.2&#xff08;银…

AVL树的完全指南:平衡与性能

文章目录 AVL树简介AVL的操作建立一个AVL树插入操作删除操作 书写代码1.构造函数和析构函数2.获取最大值和最小值3.树的高度和节点个数3.前序中序和后序遍历4.判断树是否为空树5.四个旋转操作6.获取平衡因子7.插入操作8.删除操作9.搜索节点.h文件中的定义 总结 AVL树简介 AVL树…

Linux---vim编辑器(续写)

5. vim正常模式命令集 插入模式 按「i」切换进入插入模式「insert mode」&#xff0c; 按“i”进入插入模式后是从光标当前位置开始输入文件&#xff1b; 按「a」进入插入模式后&#xff0c;是从目前光标所在位置的下一个位置开始输入文字&#xff1b; 按「o」进入插入模式…

未来相遇过去:博物馆藏品管理平台的科技革新之旅

引言&#xff1a; 尊重历史&#xff0c;意味着保护其实体的载体。在博物馆这个时间的容器中&#xff0c;每一件藏品都承载着人类文明的印记&#xff0c;它们是历史的低语&#xff0c;是过去对现在的细语。在这篇文章中&#xff0c;我将带您走进博物馆的幕后&#xff0c;探究藏品…

基于SSM的“图书仓储管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“图书仓储管理系统”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统登录页面 人员管理信息页面 添加人员信息页…