Mysql Schema 与 数据类型优化

本文介绍了MySQL中各种数据类型的选择策略,包括整数、实数、字符串等类型的特点及适用场景,旨在帮助开发者选择最适合应用需求的数据类型,从而提高数据库性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

良好的逻辑设计和物理设计是高性能的基石。

1.1选择优化的数据类型

Mysql 支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。

1、更小的通常更好
一般情况下,应该尽量使用可以正确存储数据的最小数据类型。更小的数据类型通常更快。
2、简单就好
简单数据类型的操作通常需要更少的 CPU 周期。(整数比字符串代价更低;整数存储IP;Mysql内建的函数存储日期和时间)
3、尽量避免null
通常情况下,通常指定列为 not null
复制代码

1.1.1 整数类型

有两种类型的数字,整数(whole number)和实数(real number),如果存储整数,可以使用这几种数据类型

数据类型存储空间存储值范围
tinyint8-2^7 - 2^7-1
smallint16-2^{15} - 2^{15}-1
mediumint24-2^{23} - 2^{23}-1
int32-2^{31} - 2^{31}-1
bigint64-2^{63} - 2^{63}-1

1.1.2 实数类型

实数是带有小数部分的数字。

应该尽量只是在对小数进行精确运算时,才使用decimal(存储财务数据),但是在数据量比较大的时候,可以考虑使用 bigint 代替 decimal ,将需要存储的数据按照小数位乘以相应的倍数即可。

1.1.3 字符串类型

  • varchar

varchar 类型用于存储可变长字符串,是最常见的字符串数据类型。varchar 需要使用 1 或 2 个额外字节记录字符串的长度。

  • char

char 类型是定长的,mysql 总是根据分配的字符串的长度分配足够的空间。char 适合存储很短的字符串或者所有值都接近一个长度(密码的MD5值)

  • binary(固定长度字节) 和 varbinary(可变长度字节)

优势:mysql 比较 binary 字符串时,每次按一个字节,并且根据字节的值进行比较,因此,二进制比较比字符串比较简单的很多,所以也就更快。

慷慨是不明智的:varchar(5) 和 varcahr(255) 存储 'hello'的空间开销是一样的,但是更长的列消耗更多的内存,因为 mysql 通常会分配固定大小的内存块来保存内部值。所以最好的策略是只分配真正需要的空间。

1.1.4 blob and text

BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。

TEXT 存放最大长度为 65,535 个字符的字符串。

尽量避免使用

1.1.5 enum 枚举

1、枚举类型实际存储为整数,而不是字符串。

2、枚举字段内部是按照内存存储的整数而不是字符串来进行排序的。

3、枚举最不好的地方是字符串列表是固定的。修改的话只能 alter table

1.1.6 日期和时间类型

datetime 和 timestamp

datatime:从1001到9999年,使用八个字节的存储空间

timestamp :表示1970 到2038年。和unix时间戳相同。使用四个字节的存储空间。timestamp 显示的值依赖于时区。

1.1.7 位数据类型

1.1.8 标识符

为标识符选择合适的数据类型非常重要

1 、整数类型:通常是最好的选择,因为他们很快并且可以使用 auto_increment

2 、enum 和 set 类型:糟糕选择,尽量避免

3 、字符串类型:避免,因为他们消耗空间,并且通常比数字慢。

如果存储 uuid 值,用 unhex() 函数转换 UUID 值为 16 字节的数字,然后存储在一个 bigint(16) 列中。检索时,根据 hex() 函数来格式化十六进制格式。

1.1.9 特殊数据类型

比如低于秒级精度的时间戳。

IP 地址。无符号整数(unsigned int)来存储。mysql 提供 inet_aton() 和 inet_ntoa() 函数来进行转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值