高性能mysql 第4章 Schema与数据类型优化

Posted 张小贱1987

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高性能mysql 第4章 Schema与数据类型优化相关的知识,希望对你有一定的参考价值。

基本原则:

  • 更小的通常更好:占用更少的磁盘 内存和cpu缓存。
  • 简单就好:比如整形比字符型代价更低。使用日期型来存储日期而不是字符串。使用整形存储ip地址。
  • 尽量避免null:如果可以 加上not null约束。因为可以null的列使索引,索引统计,值比较都变得复杂。通常把可为null的列改为not null带来的性能提升比较小,调优时没有必要首先修正这种情况来排查问题。但是如果计划在列上建立索引,如果可以保证是not null,那么尽量加上。

整数类型:

tinyint,smallint.,mediumint,int,bigint.分别是1,2,3,4,8个字节。也就是8,16,24,32,64位,存储的数据范围为-2(n-1)到2(n-1)-1。

如果使用unsigned属性,那么表示不允许负数。那么存储的范围就变成了0到2n-1。

mysql可以为整数类型制定宽度,如int(1)和int(20),只是多了一个宽度约束,在内部,他们都是int。

实数类型:

实数是带小数点的数字。然而他们的作用并不局限与这个。如可以使用decimal存储比bigint还要大的整数。

不精确数字类型(浮点类型):float double,他们分别为4个字节,8个字节。

关于指定精度,书上一掠而过了,以下内容来自网络:

float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都是浮点型,而decimal是定点型;MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。

decimal最多只能65个数字,也就是是那面总的M最大只能是65。

同样大小的decimal要比float和double占据更大的空间,耗费更多的cpu,所以如果不是要求精确的计算(如财务计算),最好不要使用decimal。

书上提到一种委婉的办法,将有小数的decimal数字成与一定的倍数,如1万倍,然后存储为bigint。可以提升性能。我在想这种委婉的办法带来的性能提升划算吗。可能会在极端的环境下使用吧。

以上是关于高性能mysql 第4章 Schema与数据类型优化的主要内容,如果未能解决你的问题,请参考以下文章

《高性能MySQL》——Schema与数据类型优化(笔记)

Schema与数据类型优化

高性能mysql读书笔记:Schema与数据类型优化

第04章 Schema与数据类型优化

MySQL《高性能MySQL》学习笔记,第四章,Schema与数据类型优化

高性能MySQL—Schema与数据类型优化