MySQL 数据库开发规范

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

一、表:

     单个表的字段数控制在 20个以下,最好不超过50个

     单个表不超过20个char 或varchar 字段

     单表不超过50个纯int字段

     拒绝大SQL,大事务,批量操作

 

二、字段类型定义:

字段类型选取原则:

1、选取合适范围的数据类型

2、只取正值的数值类型,添加 unsigned属性 

3、 固定长度的字符串采用char()类型

4、 在符合数据使用前提下,尽量使用 not null

5 、不用书写数值类型存储的字符个数,比如只使用 Int(只针对数值类型)

6、TEXT类型强制生成磁盘临时表,存储上浪费空间,必须使用的话,需考虑拆分到单独的表中。

7、不在数据库中存储图片

8、避免使用保留字命名

使用案例:

 字段                               属性

`id`                  unsigned NOT NULL (仅当数值超过42亿时才使用bigint型)

`color_id`             int  unsigned          

`user_id`              int  unsigned NOT NULL

`monster_id`           int  unsigned not null

`monster_family_id`     tinyint  unsigned  not  null

`monster_pattern_id`    mediumint   unsigned  not  null

`is_lighted`             tinyint

相关数据类型存储需求:

类型定义 取值范围 存储需求
TINYINT [UNSIGNED][ZEROFILL] 带符号:128--127 
无符号:0---128
1个字节
Smalint [unsigned] [zerofill] 带符号:-32768-32767 
无符号:0--65535
2个字节
Mediumint[unsigned] [zerofill] 带符号:88388608--8388607 
无符号:0--16777215
3个字节
Int [unsigned] [zerofill] 带符号:2147683648--2147683647 
无符号:0-4294967295
4个字节
Bigint [unsigned] [zerofill] 带符号:9223372036854775808--9223372036854775807 
无符号:0--18446744073709551615
8个字节
CHAR(M)(M是字符长度) M个字符长度(0<M255)(不是字节数) 与字符集有关
VARCHAR(M)(M字符长度)

 

 

 

三、键和索引的设计:

1、  命名规范:index_字段名1[_字段名2]

2、  避免对字符串类型添加索引,否则的话    采用enum 或SET类型

3、  只给最常用的查询添加索引

4、  避免使用重复或者多余索引

5、  对于字符索引,可以以前N个字段作为索引  (防止innodb聚集索引带来的       负面)

6、不索引大型字段(有很多字符)

7、不索引常用的小型表

8、不在索引列进行数据运算或函数运算(会导致无法使用索引,或者全表扫描)

9、对于自增列或全局ID做主键,按自增顺序插入值

 四、索引使用原则:

1、匹配全部字段

2、匹配索引左边前缀

3、匹配索引列范围值

4、精确一部分索引,并且匹配另一个字段的某个范围

5、对索引字段插入数据时,按照顺序插入

6、尽量不使用外键,产生额外开销,并且使逐行操作,易出现死锁现象

 

五:dml语句

1、尽量避免使用子查询(使用的话需要确认)

2、Where条件中必须使用和过滤字段完全一致的数据类型,避免使用函数转换字段的格式

3、 对于复合索引,语句必须遵循‘最左前缀’,禁止直接跳过前缀最左边字段。

4、对于order  by  group by 子句时 尽量引用索引字段。(如能达到mysql为排序和查找行使用同样的索引,引用where中的索引字段

5、select   *  from 表 避免使用。

6、显示的 使用索引 使用 USE INDEX()关键字

7、SQL语句应尽量简单(一个sql只能在一个CPU运算,命中率高,减少锁定时间,可以用上多个CPU)

8、利用count(*) 进行汇总时,把NULL排除在外,资源开销大,尽量不用。

9、对于非实时统计数据,尽量使用单独统计的表,定期重算

10、不要再程序端显示加锁。

11、insert 语句书写必须加 字段名称

 

 






本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/933325,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
16天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
4月前
|
存储 关系型数据库 MySQL
12:企业规范约束-MySQL
12:企业规范约束-MySQL
37 0
|
2月前
|
存储 关系型数据库 MySQL
Mysql数据库设计规范和技巧
Mysql数据库设计规范和技巧
|
2月前
|
SQL 关系型数据库 MySQL
【JavaEE进阶】 数据库连接池与MySQL企业开发规范
【JavaEE进阶】 数据库连接池与MySQL企业开发规范
|
6月前
|
存储 关系型数据库 MySQL
Mysql(一) 数据库的设计与规范
假设,课程的学分发生了变更,那我们就需要把整表关于该课程的学分都要更新一次,但如果我们拆分出课程表,那我们就只需要把课程表中的课程信息更新就行。
129 0
|
7月前
|
SQL 关系型数据库 MySQL
MySQL数据库如何实现AX规范
我们一起来看一下 XA 规范相关的内容
48 0
|
4月前
|
关系型数据库 MySQL 程序员
MYSQL数据库设计规范与原则
MYSQL数据库设计规范与原则
72 0
|
9月前
|
存储 缓存 NoSQL
MySQL 设计与查询规范
MySQL 设计与查询规范
87 0
|
6月前
|
SQL 关系型数据库 MySQL
MySQL第一讲:程序员必须精通的MySQL索引规范
MySQL第一讲:程序员必须精通的MySQL索引规范
|
8月前
|
存储 关系型数据库 MySQL