ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql 优化数据类型

2020-04-04 15:55:53  阅读:333  来源: 互联网

标签:存储 字节 decimal 数据类型 索引 mysql null 优化


1.更小的通常更好

选择不会超过范围的最小类型

2.简单就好

例如,整型比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较比整形比较更复杂。

3.尽量避免null

如果查询中包含可为null的列,对mysql来说更难优化,因为可为null的列使得索引,索引统计和值比较 都更复杂。

可为null的列会使用更多的存储空间,在mysql里也需要特殊处理。当可为null的列被索引时,每个索引记录需要一个额外的字节,在myISAM里甚至还可能导致固定大小的索引(例如只有一个整数列的索引)变成可变大小的索引。

通常把可为null的列改为not null 带来的性能提升比较小,所以调优时没必要首先在现有的schema中查找并修改掉这种情况。除非确定这会导致问题。但是,如果计划在列上建索引,就应该避免设计成可为null的列。

也有例外,InnoDB使用单独的bit存储null值,所以对于稀疏数据有很好的空间效率。但这一点不适用于myISAM。

 

4.整数类型:

tinyint(8),smallint(16),mediumint(24),int(32),bigint(64)

mysql可以为整数类型指定宽度,例如int(11),对大多数应用这是没有意义的:它不会限制值的合法范围,只是规定了mysql的一些交互工具(例如mysql命令行客户端)用来显示字符个数。

实数类型:

不只是为了存储小数部分;也可以使用decimal存储比bigint还大的整数。mysql既支持精确类型,也支持不精确类型。

float和double,是cpu直接支持的浮点计算,所以浮点运算明显更快。

decimal类型用于存储精确的小数。

浮点和decimal类型都可以指定精度。对于decimal列,可以指定小数点前后所允许的最大位数。这会影响列的空间消耗。mysql 5.0和更高版本将数字打包保存到一个二进制字符串中(每4个字节存9个数字)。例如decimal(18,9)小数点两边各存储9个数字,一共使用9个字节:小数点前的数字用4个字节,小数点后的数字用4个字节,小数点本身占一个字节。

有多重方法可以指定浮点列所需的精度,这会使得mysql悄悄选择不同的数据类型,或者在存储时对值进行取舍。这些精度定义是非标准的,所以我们建议只制定数据类型,不指定精度。

因为需要额外的空间和计算开销,所以应该尽量只在对小鼠进行精确计算时才使用decimal例如存储财务数据。在数据量比较大的时候,可以考虑用bigint代替decimal,将需要存储的货币单位根据小数的位数乘以相应的倍数即可。

 

标签:存储,字节,decimal,数据类型,索引,mysql,null,优化
来源: https://www.cnblogs.com/lccsblog/p/12632145.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有