字段类型的设计和选择

1.单表字段不宜过多

建议最多30个以内

字段越多,会导致性能下降,并且增加开发难度

2.使用小而简单的合适数据类型

a.字符串类型

固定长度使用char,非定长使用varchar,并分配合适且足够的空间

char在查询时,会把末尾的空格去掉

b.小数类型

一般情况可以使用float或double,占用空间小,但存储可能会损失精度

decimal可存储精确小数,存储财务数据或经度要求高时使用decimal

c.时间日期

通常尽量使用timestamp,因为它占用空间小,并且会自动进行时区转换,无需关心地区时差

datetime和timestamp只能存储最小颗粒度是秒,可以使用BIGINT类型存储微秒级别的时间戳

d.大数据 blob和text

blob和text是为存储很大的数据的而设计的字符串数据类型,但通常建议避免使用

MySQL会把每个blob和text当做独立的对象处理,存储引擎存储时会做特殊处理,当值太大,InnoDB使用专门的外部存储区域进行存储,行内存储指针,然后在外部存储实际的值。这些都会导致严重的性能开销

blob是二进制字符串,text是非二进制字符串,两者均可存放大量的信息。Blob主要存储图片、音频信息等,而text只能存储纯文本文件。

3.尽量将列设置为NOT NULL

a.可为NULL的列被索引时,占用更多的存储空间,一般,把可为NULL的列改为NOT NULL带来的提升比较少。

b.可为NULL的列,在使用索引和值比较时,MySQL需要做特殊的处理,损耗一定的性能,更难优化

建议:通常最好指定列为NOT NULL,除非真的需要存储NULL值

4.尽量使用整型做主键

a.整数型通常是标识列最好的选择,因为它们很快并且可以使用AUTO_INCREMENT

b.应该避免使用字符串类型作为标识列,因为它们很消耗空间,并且通常比数字类型慢

c.对于完全"随机"的字符串也需要多加注意。例如:MD5(),SHAI()或者UUID()产生的字符串。这些函数生成的新值也任意分布在很大空间内,这会导致INSERT和一些SELECT语句很缓慢

MySQL数据库中字段类型与设计原则相关推荐

  1. MySQL数据库中有字段类型是日期,时间的插入语句处理

    MySQL数据库中有字段类型是日期,时间的插入语句处理 什么是时间戳? TIMESTAMP是一种类型,具体的值:19990717080000 CURRENT_TIMESTAMP是什么意思? on up ...

  2. 数据库中字段类型对应的C#中的数据类型

    数据库中字段类型对应C#中的数据类型: 数据库                 C#程序 int int32 text string bigint int64 binary System.Byte[] ...

  3. java中时间入数据库格式转换_数据库中字段类型为datetime,转换成java中的Date类型...

    数据类型对照 点击打开链接 JDBC: PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuer ...

  4. 使用MyBatis Plus 3.2.0版本插件代码生成器生成实体类后,对于数据库中字段类型datetime的字段会转变为LocalDateTime类型

    问题描述: 使用MyBatis Plus 3.2.0版本插件代码生成器生成实体类后,对于数据库中字段类型datetime的字段会转变为LocalDateTime类型,IDEA提示报错"Usa ...

  5. Mysql数据库的字段类型:

    数据库的数据类型和字段属性: 1.数值 ①tinyint     十分小的数据          1个字节 ②smallint    较小的数据            2个字节 ③mediumint ...

  6. linux下查看mysql数据库的字段类型_系统运维|[小白技巧]如何在Linux上检查MySQL数据表的存储引擎类型...

    提问: 我想要知道我的MySQL数据库是MyISAM还是Innodb类型.我该如何检查MySQL数据库表的类型? MySQl主要使用两种存储引擎:MyISAM 和 Innodb.MyISAM是非事务的 ...

  7. mysql 文章 字段设计_在mysql数据库中,文章表设计有啥好的思路

    Q: 用mysql设计一张文章表,不知道有啥好的思路! 我是这样的,应为考虑附件和图片,所以我的文章表除了有varchar(1000)的文章内容,还设置了个Bolb接收附件和图片. 我用的是mysql ...

  8. 如何获取mysql数据库中字段的注释和类型长度

    因为某种需求,想要获取到mysql中所有字段的注释和类型等信息,可通过以下sql查询. 查询sql SELECT COLUMN_NAME as '列名',COLUMN_COMMENT as '字段注释 ...

  9. 在mysql数据库中,文章表设计有啥好的思路

    Q: 用mysql设计一张文章表,不知道有啥好的思路! 我是这样的,应为考虑附件和图片,所以我的文章表除了有varchar(1000)的文章内容,还设置了个Bolb接收附件和图片. 我用的是mysql ...

最新文章

  1. 排名看似毫无波澜的,但 R 语言热度仍在上升 | 8月编程语言排行
  2. CM记录-选择合适的硬件
  3. 帆软finereport实现动态切换分组和列表模式
  4. plsql中文乱码问题(显示问号)
  5. CSS样式:2、超出隐藏控制
  6. UNP Chapter 25 - 原始套接口
  7. linux web目录写入权限命令,Linux下Web目录和文件安全权限设置
  8. 数学建模1:lingo软件求解优化模型
  9. 如何安装WinDriver—linux 系统下和Windows系统下———官网中文教程
  10. 免费老牌php空间,Alwaysdata.com老牌稳定法国PHP免费空间
  11. 软件工程导论——课堂学习笔记
  12. pip安装scikit-learn
  13. 服务器多网卡多路由策略
  14. 一个区块链项目的40种死法 |链捕手
  15. mPOS安全提升之路
  16. 计算机大赛鼓励语录,致2019年的自己 鼓励自己的经典语句
  17. 2022(秋)工程伦理答案 第二章
  18. java毕业生设计信管专业毕业生就业管理信息系统计算机源码+系统+mysql+调试部署+lw
  19. React学习(6)-React中组件的数据-state
  20. 猫盘X3P 自启动frp及tailscale配置开机自启

热门文章

  1. Java实现超级简易的银行ATM机项目(详细注释版)
  2. 河南职称计算机证书领取,河南省职称高级职称评审结束后多长时间可以拿到证..._职称英语考试_帮考网...
  3. 论文阅读:Out of time: automated lip sync in the wild
  4. 魔兽争霸linux版本下载地址,Linux下能玩魔兽世界、打DOTA2了 4K 120Hz很爽
  5. 最新Vue 天禹老师笔记
  6. Android自学笔记(番外篇):全面搭建Linux环境(一)——前期准备工作
  7. Auto packing the repository in background for optimum performance. See git help gc for manual hous
  8. 自适应近聚类(Clustering and Projected Clustering with Adaptive Neighbors)
  9. 这种让你肚子疼的分子机制找到了!西湖大学Cell论文揭示病菌入侵人体“新大门”...
  10. idea中lombok下载方法和搜不到lombok解决方法