首页 / MYSQL / Mysql优化系列之数据类型优化
Mysql优化系列之数据类型优化
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Mysql优化系列之数据类型优化,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2735字,纯文字阅读大概需要4分钟。
内容图文
![Mysql优化系列之数据类型优化](/upload/InfoBanner/zyjiaocheng/501/381e9dcdba94424497580c7a7aa68275.jpg)
- 简单就好
这是出于操作数据类型的效率和代价考虑。整型比字符型操作代价更低,因为字符集和校对规则是字符处理比整型更复杂
两个例子:使用Mysql内建的datatime而不是字符串存储时间,使用整型而不是IP字符串存IP地址
- 尽量避免NULL
这是个很烦人的值,做开发的都不喜欢,建字段时请尽量指定是否非空,NULL使得索引,统计,比较都变得更复杂,相信
大家都曾查过count(*)和count(column_name)的区别,后者会过滤掉column_name值为NULL的记录,至于索引失效的问题后面
单独讲索引的时候会讲,这里只提:如果这计划在列上建索引,那么这一列最好不要允许为NULL
以上三点是比较简单的几个原则
下面是我开发中总结的一些干货。不定期补充
一、整数类型
(1)UNSIGNED属性表示不允许负值,可以使得正数的上限提高一倍,比如tinyint+unsigned可以使原本的-128~127的范
围变为0~255
(2)通常我们用tinyint存状态值(这个值范围足够了)而不要用int,如果是Boolean类型,那么tinyint(1)当值为1和0时,查
询结果自动转为true和false,条件参数相应的也可以直接传入true和false即可
(3)INT(11)不会限制值的范围,只是规定了一些客户端工具用来显示的字符的个数,所以对于存储和计算来说INT(11)和
INT(1)相同
(4)IP地址实际上是32位无符号整数,用INT存储,Mysql提供转换函数为INET_ATON()和INET_NTOA()
二、小数(实数)
通常存金额用decimal(11,2),这表示整数部分和小数部分分别为9位和2位注意!,当然可以根据具体的金额大小选择长度
注意这时候对应的java中用BigDecimal类来处理运算时要仔细,因为加减法和比较跟平常不一样
三、字符串类型
VARCHAR是可变长字符串,比定长字符串(CHAR)更节省空间,仅使用必要的空间
另外VARCHAR需要额外字节记录字符串长度(不同情况需要字节数不同)
CHAR类型是定长字符串,开发中基本很少用(一些公司甚至基本上不考虑这种类型了)
注意:字符串长度定义不是字节数,是字符数
四、日期和时间类型
(1)datetime使用8字节存储空间,保存从1001年到9999年的秒数。与时区无关,默认情况下,Mysql以一种可排序的
格式显示它的值,例如:"2018-10-14 22:30:08"
(2)timestamp只使用4字节存储,保存1970年1月1日午夜以来的秒数,依赖于系统时区,和UNIX时间戳相同,转换
函数分别为FROM_UNIXTIME()和UNIX_TIMESTAMP(),可以设置根据当前时间戳更新,比如我们熟悉的update_time字段
五、标识列
用于唯一标识某条记录的列,或作为另一张表的关联字段的列。其中关联字段的字段类型和属性应该统一,其中整数类
型是最优先的选择,几乎每张表我们都可以设置一个自增的整数列。另外不要用随机的字符串作为标识列的值,MD5(),
UUID()产生的字符串都属于此类,如果存储UUID值,应移除"-"符号。更好的一种做法:用UNHEX()函数转换UUID值为16字
节的数字,检索时再通过HEX()来格式化为十六进制格式
以上是数据类型的一些心得总结,下一篇总结下表设计的一些规范和优化
Mysql优化系列之数据类型优化
标签:进制 原则 十六 系统时区 自动 需要 简单的 字符型 根据
本文系统来源:https://www.cnblogs.com/yb38156/p/9788248.html
内容总结
以上是互联网集市为您收集整理的Mysql优化系列之数据类型优化全部内容,希望文章能够帮你解决Mysql优化系列之数据类型优化所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。