阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL数据类型的优化选择

178次阅读
没有评论

共计 913 个字符,预计需要花费 3 分钟才能阅读完成。

整数类型:

Tinyint-8

Smallint-16

Mediumint-24

Int-32

Bigint-64

实数类型(带有小数部分的数字)

Float-4/double-8:浮点

Decimal:精确(只是存储格式,在计算中会转为 double 类型)

浮点类型在存储同样范围的值时,通常比 decimal 使用更少的空间。

字符串类型:

Varchar:可变长字符串(需要 1 - 2 个字节存储字符串长度)

优点:比定长类型节约空间;

缺点:碎片问题。字符串 update 变长时,一个行的占用空间变长,但是在页内没有更多空间存储,MYISAM 将行拆成不同片段存储,InnoDB 分裂页使行可以放进页内;

适用:字符串最大长度比平均长度大很多;列的更新很少;

Char:定长字符串(MySQL 会删除所有末尾空格)

优点:不易产生碎片

适用:存储密码的 MD5 值;经常变更的数据;

大型数据类型:

Blob:二进制

Text:字符

特殊性:mysql 将 blob 和 text 值当做一个独立的对象处理,当值太大时,innodb 在值内存储一个指针,外部存储区域存储实际的值;mysql 对 blob 和 text 的排序,只对每列的最前 max_sort_length 进行排序;mysql 不能将列的全部长度字符串进行索引,也不能使用这些索引进行排序;

枚举类型 ENUM:

mysql 在存储枚举类型时非常紧凑;

Mysql 在内部会将每个值在列表中的位置保存为整数,并且在表的.frm 文件中保存“数字 - 字符串”的映射关系的查找表;

缺点:字符串列表是固定的,添加或删除字符串都需要 alter table;

优点:可以缩小表的大小;主键减小后,innodb 表的非主键索引也会变小;

关联速度:enum 列 关联 enum 列  >  varchar 列 关联 varchar 列  >  enum 列 关联 varchar 列

日期时间类型:

Datetime:8 字节;与时区无关;保存大范围的值,从 1001 年到 9999 年,精度为秒;

Timestamp(尽量使用):4 字节;依赖于时区;保存 1970.1.1 以来的秒数;列默认为 not null;

Timestamp 的特殊性:如果插入数据时没有指定第一个 timestamp 列的值,mysql 则设置这个值为当前时间;

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计913字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中