一张表的设计的好坏会直接影响到后期的性能问题。一个优秀的程序员应该提前考虑表的设计。

字段设计原则

1.更小的通常更好
一般情况下,应该尽量使用可以正确存储数据的最小数据类型。因为更小的数据类型占用更少的磁盘、内存、和CPU缓存。

2.简单就好
简单的数据类型操作可以减小CPU的使用率。例如整型比字符操作代价更低,因为字符集的排序规则比整型更加复杂。尽量选用mysql的内建类型来存储日期和时间(data,time,datatime)而不是用字符串。

3.尽量避免NULL
null是列的默认属性,通常情况下最好指定列not null,除非业务中需要存储null值。
因为有null值的列使索引、索引统计和值比较都更复杂,如果在这列上建立索引,每个索引记录都需要一个额外的字节。

mysql支持的数据类型

1.整数类型

类型 存储空间(单位:位)
tinyint 8
smallint 16
mediumint 24
int 32
bingint 64

它们取值范围是:
−2n−1~2n−1−1-2 ^ {n-1} ~ 2 ^ {n-1} - 1−2n−1~2n−1−1
n表示存储空间的位数

整数类型有可选的unsigned属性,表示不允许负值。
可以使正数上限提高一倍 如:tinyint的范围是 -128-127 而 tinyint unsigned 是 0~255

2.实数类型

类型 存储空间(单位:位)
float 4
double 8
declmal

float和double用于存储小数类型的数据,但是容易丢失精度。
declmal用于存储精确的小数 如:declaml(18,9) 小数两边将各存9个数字,一共使用9字节:
小数点前的数字使用4字节,小数点后数字使用4字节,小数点占用一个字节。

declmal类型最多允许存65个数字。

3.字符串类型

类型 存储空间(单位:位)
char 可指定长度
varchar 自动增长
blob
text

varchar用于存储可变长的字符串,它比定长类型更节省空间。varcher需要1到2个字节记录字符串的长度:如果字符串的最大长度<=255使用1个字节,否则使用两个字节。
char适合存贮很短的字符串,或者所有值都接近统一长度的的字符串,比如密码的MD5值。
char会自动截断字符串后面的空格,varchar不会。
blob和text都是为了存储很大的数据而设计的。
mysql把每个blob和text当作一个单独的对象处理。当值变的太大时,InnoDB会使用专门的“外部”存储区域来进行存储。此时每个值在行内需要1~4个字节存储一个指针,指向外部存储区域的值。

4.日期和时间类型

类型 存储空间(单位:位) 日期格式
data 4 YYYY-MM-DD
time 3 HH:MM:SS
datatime 8 YYYY-MM-DD HH:MM:SS
timestamp 4 YYYY-MM-DD HH:MM:SS

datatime能保存1001~9999年,精度为秒
timestamp保存了1970~2038年,精度为秒

5.位数据类型
bit :bit列的最大长度是64位,使用2进制存储。

6.枚举
枚举类型有时候可以代替字符串进行存储。可以很好地进行数据分类。
在建表地时候注意排好字符串的优先级。
数据库会将枚举类型的数据映射到一个整数上
看个例子吧:

CREATE TABLE enum_test (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255) NOT NULL,col ENUM('red', 'blue', 'black') NOT NULL
)default charset=utf8;
INSERT INTO enum_test(title, col)
VALUES('红鲤鱼1号', 'red');INSERT INTO enum_test(title, col)
VALUES('红鲤鱼2号', 'red');INSERT INTO enum_test(title, col)
VALUES('红鲤鱼3号', 1);INSERT INTO enum_test(title, col)
VALUES('蓝鲤鱼1号', 'blue');INSERT INTO enum_test(title, col)
VALUES('蓝鲤鱼2号', 'blue');INSERT INTO enum_test(title, col)
VALUES('蓝鲤鱼3号', 2);INSERT INTO enum_test(title, col)
VALUES('黑鲤鱼2号', 'black');
select * from enum_test;

select priority+0 from enum_test;


从查询结果可以看出:enum实际上是以整数类型存储的,所以也可与根据enum进行排序分组等操作。

[参考资料]《高性能MySql(第3版)》

MySql优化之路(一)--- 字段的设计和类型选择相关推荐

  1. mysql最大述_mysql最大字段数量及 varchar类型总结

    mysql最大字段数 一直对mysql最大字段数不明确有人说是1024 还有人说 Max columns per row 4096 InnoDB is limited to 1000columns 实 ...

  2. 史上最全的MySQL优化手册

    MySQL数据库优化大全 (注:文档参考高性能MySQL,SQL手册,官方文档 [提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! 大 ...

  3. 浅显的mysql优化

    浅显的mysql优化,后续会不断完善 1.varchar类型的逐渐会使性能下降 2.当你知道只有一条数据的时候,使用limit 1.这样mysql在查找到到一条符合条件的数据之后会停止搜索,而不是继续 ...

  4. mysql字段优化_MySQL优化(1):字段的设计

    Web项目中,当Java或者Go等语言速度提升到瓶颈的时候,我们需要关心MySQL的优化 可以优化的方面有很多:设计表.负载均衡.读写分离.SQL语句优化等 (1)IP地址设计 例如我们需要存储IP地 ...

  5. MySQL优化系列(二)--查找优化(1)(非索引设计)

    MySQL优化系列(二)--查找优化(1)(非索引设计) 接下来这篇是查询优化,用户80%的操作基本都在查询,我们有什么理由不去优化他呢??所以这篇博客将会讲解大量的查询优化(索引以及库表结构优化等高 ...

  6. mysql字段简索引_3万字总结,Mysql优化之精髓

    本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降. ...

  7. ef mysql 优化_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  8. mysql静态化设计_网站静态化与mysql优化

    一.伪静态 1.正则表达式的回顾 (1)要求取出练习的4个数字 (2)要求取出,形式为:xxx-yyy-xxx的数据 正则中几个概念: 子表达式:简单理解成用小括号括起的部分就是一个子表达式, 捕获: ...

  9. mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

最新文章

  1. Numpy中的通用函数和聚合
  2. windows上搭建python+gvim开发环境
  3. play mysql_play framework 2.0 使用 mysql
  4. java对象的类型转换_Java对象的类型转换和属性复制
  5. String案例 练习: 将一个字符串进行反转
  6. php --魔术常量 /魔术方法
  7. 程序员删库被判 6 年,公司损失近亿,云原生时代如何打造安全防线?
  8. linux教程:[4]配置Tomcat开机启动
  9. python 技能清单_Python清单
  10. Cobar的安装和配置步骤
  11. android图片剪切第三方,Android第三方开源图片裁剪截取:cropper
  12. 限制性立方样条(Restricted Cubic Spline)
  13. 滴滴共享单车在深圳被叫停;六六接受京东道歉;宝马发布最新充电网络计划丨价值早报
  14. 视觉组考核——装甲板识别
  15. 【shell批量删除ovs网桥命令】
  16. V4L2图像采集+图片格式转换(YUYV、RGB、JPEG)
  17. Word加粗的字体如何恢复正常粗细
  18. C++面向对象程序设计实验题:有理数类(分数类)设计
  19. 储存程序通用计算机预设方案,【盛兴利合互动课堂功能―通用型备课及课堂授课应用】PjTime.COM 解决方案 盛兴利合...
  20. 软件需求——需求规格说明书模版(三)

热门文章

  1. html页面使用var变量,html元素:var标签的使用方法及作用
  2. redis6种数据淘汰策略
  3. 最新版谷歌浏览器2019版本上传和下载卡死无响应问题
  4. 1000元计算机配置方案,1000元赛扬J345低功耗主机推荐 2018最便宜电脑配置方案 (全文)...
  5. android ndk开发
  6. 计算机网络技术实训报告大一,计算机网络技术实训报告.doc
  7. 现在程序员圈竞争激烈,如何才能避免焦虑?如何才能打破现状......
  8. R语言基础知识(1)-数据类型及其常用方法
  9. 教你如何快速提取视频中的音频
  10. 腾讯云服务器标准型SA1实例配置性能使用场景及注意事项分析