码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2017-06-08 01:18:39      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:提升性能   索引   字符型   min   精确   空间   float   存储   medium   

基本原则:

  • 更小的通常更好:占用更少的磁盘 内存和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与数据类型优化

标签:提升性能   索引   字符型   min   精确   空间   float   存储   medium   

原文地址:http://www.cnblogs.com/xiaolang8762400/p/6959786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!