MySql 数据类型选择与优化

选择优化的数据类型

更小的通常更好
一般情况下尽量使用可以正确存储数据的最小类型。更小的数据类型通常更快,因为它们占用更少的磁盘,内存和CPU缓存,并且处理时需要的CPU周期也更少。但也要确保没有低估需要存储值的范围。
简单就好
简单的数据类型通常需要更少的CPU周期。例如:整型比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较比整型比较更复杂。例如:应该使用 mysql 的内建类型而不是字符来存储日期和时间,另外一个应该使用整型存储IP地址。
尽量避免 NULL
NULL 使得索引、索引统计和值比较都更复杂

实数类型
DECIMAL 类型用于存储精确的小数。因为CPU 不支持对 DECIMAL 的直接计算,所以在 Mysql 5.0 和更高版本中,Mysql 服务器自身实现了 Decimal 的高精度计算。相对而言,CPU 直接支持原生浮点计算,所以浮点运算明显更快。Decimal 只是一种存储格式,在计算中 Decimal 会转换为 Double 类型。有时候也可以使用 Bigint 替代浮点型。

字符串类型
Varchar
Varchar 节省了存储空间,所以对性能也有帮助。但是,由于是变长的,在 Update 时可能使行长变得比原来更长,这就导致需要做额外的工作,比如导致频繁的页分裂和合并,从而产生大量磁盘碎片。
Char
Char 类型是定长的,当存储 Char 时, Mysql 会删除所有的末尾空格。对于经常变更的数据也不容易产生磁盘碎片。

[!NOTE] 慷慨是不明智的
更长的列会消耗更多的内存,因为 Mysql 通常会分配固定大小的内存块来保存内部值。尤其是使用内存临时表进行排序或操作时会特别糟糕。在使用磁盘临时表进行排序时也同样糟糕。
所以最好的策略是只分配真正需要的空间

BLOB 和 TEXT
Mysql 对 BLOB 和 TEXT 列进行排序与其它类型是不同的:它只对每个列的最前 max_sort_length 字节而不是整个字符串做排序。Memory 引擎不支持 BLOB 和 TEXT 类型,因此在包含 BLOB 和 TEXT 类型的列都会转而使用 MyIsam 磁盘临时表。

日期和时间类型
TIMESTAMP
TIMESTAMP 显示的值也依赖于时区
DATETIME
它把日期和时间封装到格式为 YYYYMMDDHHMMSS 的整数中,与时区无关。

[!NOTE] TIPS
有时候人们会将 UNIX时间戳存储为整数,但这将不会带来任何收益。用整数保存时间戳的格式通常不方便处理,所以我们不推荐这样做。

选择标识符
当选择标识列的类型时,不仅仅需要考虑存储类型,还需要考虑 Mysql 对这种类型怎么计算和比较。一旦选定了一种类型,要确保在所有关联表中都使用同样的类型。类型之间需要精确匹配,包括像 UNSIGNED 这样的属性。混用不同数据类型可能导致性能问题,即使没有性能影响,在比较操作时隐式类型转换也可能导致很难发现的错误。

选择合适的主键
大多数情况使用自增主键ID就可以解决问题,但当我们预估系统会有比较大的业务增长时,可以考虑使用分布式ID作为业务主键,避免后面分库分表时带来的不便

MySQL schema 设计中的陷阱

太多的列
MySQL 的存储引擎API工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列。从行缓冲格式将编码过的列转换成行数据结构的操作代价是非常高的。这个过程是CPU密集型的(太多的列会导致CPU占用过高)。
太多的关联
尽量不关联或者少关联表

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【自然语言处理】【Scaling Law】Observational Scaling Laws:跨不同模型构建Scaling Law

相关博客 【自然语言处理】【Scaling Law】Observational Scaling Laws:跨不同模型构建Scaling Law 【自然语言处理】【Scaling Law】语言模型物理学 第3.3部分:知识容量Scaling Laws 【自然语言处理】Transformer中的一种线性特征 【自然语言处理】【大…

jmeter性能优化之tomcat配置与基础调优

一、 修改tomcat初始和最大堆内存 进入到/usr/local/tomcat7-8083/bin目录下,编辑catalina.sh文件,,默认堆内存是600m,初始堆内存和最大堆内存保持一致, 可以更改到本机内存的70%,对于Linux系统&#xff0…

conda创建虚拟环境并激活

1 conda activate base 2 conda creat -n aaa python** 3 conda activate aaa 4 interpreter里面去选择刚搞好的编译器 ...../conda.exe

【SpringBoot】四种读取 Spring Boot 项目中 jar 包中的 resources 目录下的文件

本文摘要:四种读取 Spring Boot 项目中 jar 包中的 resources 目录下的文件 😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。公粽号&#xf…

【操作系统】Windows平台捕获崩溃现场底层原理,附代码亲测MiniDumpWriteDump

MiniDumpWriteDump 是一个Windows API函数,它属于DbgHelp.dll库,用于生成程序崩溃时的内存转储文件(MiniDump)。这个函数是Windows平台下用于捕获程序崩溃时的内存状态的常用方法之一。以下是MiniDumpWriteDump函数的原理和工作流…

【C++】ios::sync_with_stdio(false) 与 cin.tie(nullptr) 加速 IO

一、前言 之前写题遇到大数据量(cin、cout 数据量级达到 1e5、1e6 ),因为考虑 IO 性能报错 TLE,故选择 scanf、printf 替代 cin、cout,以解决问题。一直以来没有深入研究其中原因,只知关键词——同步&…

设计模式(十三)行为型模式---命令模式

文章目录 命令模式简介结构UML图具体实现UML图代码实现 命令模式简介 命令模式(command pattern)也叫动作模式或者事务模式。它是将请求(命令)封装成对象,使得可以用不同的请求对客户端进行参数化,具体的请…

MD中 面料的物理属性参数

该图片是Marvelous Designer软件中"Fabric Physical Properties"(面料物理属性)面板的截图,用于调整面料在弯曲、折叠时的硬度(Buckling Stiffness)。 目标部分解释了调整Buckling Stiffness的作用:通过调整该百分比值来决定面料角落处的硬度。进入80%的Buckling St…

笔记-anaconda配置Python环境

查看环境 conda env list 创建python name环境,python版本为3.9: conda create -n name python3.9 激活: conda activate name 去掉激活: conda deactivate name 进入pandas目录: cd D:\学习\pyton\antpy代码\ant-learn-…

NXP RT1060学习总结 - CANFD功能

1、RT1060-CAN FD功能简介 这里使用RT1060系列的1064芯片进行开发,测试板是官方提供的开发板;RT1060系列支持3路CAN功能,CAN1和CAN2只能最为普通的CAN外设,支持CAN2.0,而CAN3支持CAN-FD功能;CAN-FD功能这里…

【LeetCode 77. 组合】

1. 题目 2. 分析 本题有个难点在于如何保存深搜得到的结果?总结了一下,深搜处理的代码,关于返回值有三大类。 第一类:层层传递,将最深层的结果传上来;这类题有:【反转链表】 第二类&#xff1…

域名/子域名接管漏洞

域名/子域名接管漏洞 1.域接管2.子域接管子域接管概述使用BBOT扫描可劫持的子域通过DNS通配符生成子域接管 3.利用子域接管4.子域名接管防御手段 1.域接管 如果您发现某个域名被某个服务使用,但公司已经失去了对其的所有权,您可以尝试注册它&#xff08…

默认路由,直接路由,静态路由,动态路由

对于华为设备,如华为路由器或交换机,设置这些路由类型需要通过设备的管理界面或命令行界面进行配置。以下是一般情况下如何在华为设备上设置这些路由类型的指导: 默认路由: 使用命令行界面(CLI)&#xff0c…

QMatrix详解

一、定义 QMatrix是Qt框架中的一个类,它表示一个2x3的变换矩阵,通常用于进行二维图形的几何变换。这个类允许你对图形进行平移、缩放、旋转和剪切等操作。 二、功能 QMatrix的主要功能是提供一个便捷的方式来对二维图形进行线性变换。通过构建一个变换…

CS和msf的权限传递,利用mimikatz抓取win10明文密码

一、Cobaltstrike的安装 http://t.csdnimg.cn/yhZin 安装CobaltStrike,浏览博主的上篇文章即可!!! 这里我在自己的本机win11上执行了Client去连接kali中的Server端,直接执行.cmd文件即可!!&…

【vscode】ctrl+shift+end选中以下所有行删除

总结,ctrlshiftend选中以下所有行 以下由chatgpt生成 在 Visual Studio Code(VS Code)中,如果你想要选中当前光标所在的一行及之后的所有行并删除它们,可以通过组合键操作来实现。这种功能在编辑大型文件时特别有用&am…

【计算机毕业设计】基于SSM++jsp的校园驿站管理系统【源码+lw+部署文档】

目录 第1章 绪论 1.1 课题背景 1.2 课题意义 1.3 研究内容 第2章 开发环境与技术 2.1 MYSQL数据库 2.2 JSP技术 2.3 SSM框架 第3章 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 系统流程 3.2.1 操作流程 3.2.2 登录流程 3.2.3 删除信息流…

node会话管理详解(cookie、session、token)

在Node.js中,cookie、session和token都是用于会话管理的机制,但它们各自有不同的使用场景和特性。 一、cookie 命令:npm install cookie-parser -save -save 参数表示将这个模块添加到项目的 package.json 文件的 dependencies 部分&#x…

C语言| 输出菱形*

C语言| 输出*三角形-CSDN博客 输出菱形。 【分析思路】 学会输出*的三角形之后输出菱形就很简单了。我们分析一下,菱形是由两个对称的三角形组成的,也因为是对称的,所以输出的菱形的行数肯定是一个奇数。 1 我们在编程的时候,要…

基于卷积-小波神经网络的SAR图像海冰变化检测方法(MATLAB R2018A)

海冰是冰冻圈的重要组成部分,海冰的变化信息对航行安全和自然资源开采等非常重要,许多船舶没有加固防冰设备,因此,必须避开所有的冰区。尤其当冰压很高时,即使破冰船也很难在冰层中前行。为了安全航行,获取…