mysql 64位整型_高性能MySQL笔记精简(整数和实数优化)

一、优化数据类型的几个原则:

1. 更小的通常更好

a) 一般情况下应该尽量使用可以正确存储数据的最小值数据类型

b) 更小的通常更快,因为它占用更少的磁盘内存和cpu缓存,处理时需要的cpu周期更少

2. 简单就好

a) 简单数据类型的操作通常需要更少的cpu周期

3. 尽量避免NULL

a) 查询中包含可能为NULL的列,能够使MySQL更难优化

b) 可为NULL列会占用更多的存储空间,在MySQL也需要特殊处理

c) 当可为NULL的列被索引时候,每个索引继续需要一个额外的字节

注:在为列选择数据类型时,第一步需要确定合适的大类型:数字、字符串、时间等,

下一步是选择具体类型。

二、整数类型优化

1. 存储整数可以使用的几种数据类型:

a) TINYINT(8)

b) SMALLLINT(16)

c) MEDIUMINT(24)

d) INT(32)

e) BIGINT(64)

2. 整数类型可选UNSIGNED属性,标识不允许负值

a) TINYINT UNSIGNED(0~255)是TINYINT(-128~127)的两倍

3. 整数计算一般使用64位的BIGINT

4. MySQL可以为整数类型数据指定宽度:如int(11),

a) 不会限制值的合法范围

b) 只是规定了MySQL的交互工具显示字符的个数

c) 对于存储和计算来说,INT(1)和INT(11)是相同的

d) 如果一个字段设置了无符号和填充零属性,那么无论这个字段存储什么数值,数值的长度都会与设置的显示宽度一致,如上述例子中的字段b,插入数值1显示为00000000001,左边补了10个零直至长度达到11位;

e) 设置字段的显示宽度并不限制字段存储值的范围,比如字段d设置为int(5),但是仍然可以存储1234567890这个10位数字;

f) 设置的字符宽度只对数值长度不满足宽度时有效,如d字段int(5),插入1时,长度不足5,因此在左边补充4个零直到5位,但是插入1234567890时超过了5位,这时的显示宽度就起不了作用了。

三、实数类型

1. 实数是带小数部分的数字

a) 可是使用DECIMAL储存比BIGINT还打的数字

2. DECIMAL类型用于存储精确的小数

a) DECIMAL(18,9)小数点两边个存储九个数字,一共使用九个字节,,小数点前后各有四个字节,小数点本身占一个字节

b) decimal(a,b)

1. a指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。

2. b指定小数点右边可以存储的十进制数字的最大个数。小数位数 必须是从 0 到 a之间的值。默认小数位数是 0。

3. DECIMAL需要额外的空间和计算开销,应该尽量只对小数进行精确计算是才使用DECIMAL(储存财务数据)。

a) 在数据量比较大的时候,可还是考虑使用BIGINT代替DECIMAl,这时将需要储存的货币单位根据小数的位数诚意相应的倍数即可。

b) 假设要储存的财务数据精确到万分之一,则可以把所有的金额乘以一百万,然后将结果储存到BIGINT里面。同时避免浮点储存计算不精确和DECIMAL精确计算代价高的问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值