《高性能Mysql》读书笔记(2)

《高性能Mysql》读书笔记(2)

本文是阅读《高性能mysql》的笔记,主要内容是原书的第四章 Schema与数据类型优化。

表结构和数据类型优化

以下的理论都是基于MYSQL的INNODB存储引擎,其他存储引擎可能有不一样的情况。

字段数据类型选择原则

出于设计一个高性能数据表的目的,选择字段的数据类型有以下几个原则。(原则只是从所有业务场景中总结归纳出来的,使用时还是要根据具体业务的具体需求和数据库的扩展需求选用数据类型,不能一昧的遵循原则)

选择更小的数据类型

一般情况,尽量选择可以适用于字段的最小的数据类型。更小的数据类型意味着占用更少的磁盘、内存、CPU缓存和CPU时间片。但要确保业务变化不会要求字段改变数据类型,在数据量很大的情况修改数据表的字段类型是非常耗时的操作。

选择简单的数据类型

这里所说的简单是指对于各种操作消耗更少的CPU空间的数据类型。比如可以存储为整型时不要存为字符串类型,因为对整型数据的操作对CPU消耗更小,比如IP地址。另一个例子是存储时间时使用data、datatime、timestamp、time,不要用字符串类型,这些类型对于处理时间数据有更好的性能。

整数类型

MYSQL定义了5种整数类型,TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。分别占8、16、24、32、64位存储空间。同时MYSQL为整数类型提供了unsigned,即无符号。将整数类型定义为无符号可以提升一倍的非负数范围内的上限,但同时不能表示负数。

实数类型

如果需要存储的类型是浮点数一般使用FLOAT和DOUBLE类型(32位和64位),浮点数的运算取决于MYSQL所部属的平台。

对于业务上需要精确浮点数,比如汇率、余额、售价等,不能使用FLOAT和DOUBLE,因为这两个浮点数类型在运算中会出现精度丢失的现象。

精确浮点数必须使用DECIMAL类型,DECIMAL可以声明浮点数的精度,例如 decimal(18,9) 。意为18位浮点数,其中小数点后9位。

精确的浮点数如果小数点后位数确定,也可以转为整数存储。例如余额可以转为以分为单位存储为INT类型,对于存储空间和运算复杂度都有一定的提升。

字符串类型

MYSQL主要提供的两种字符串类型是CHAR和VARCHAR。这两种类型的存储方式和所使用的引擎有关。

MYSQL5.0以上版本VARCHAR在插入时会保留字符串末尾的所有空格,而CHAR则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值