MySQL 数据库开发规范

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

一、表:

     单个表的字段数控制在 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,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9月前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
221 0
|
9月前
|
存储 关系型数据库 MySQL
12:企业规范约束-MySQL
12:企业规范约束-MySQL
98 0
|
9月前
|
SQL 存储 关系型数据库
数据库开发之mysql前言以及详细解析
数据库开发之mysql前言以及详细解析
61 0
|
6月前
|
关系型数据库 MySQL Linux
数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)
无论是对于初学者还是有经验的开发者,了解MySQL的安装、客户端使用、数据类型、运算符和语法规范都是至关重要的。这不仅有助于高效地管理和查询数据,而且对于设计和实现数据库解决方案来说是基础工作。通过深入学习和实践这些知识,您可以更好地发挥MySQL数据库的强大功能。
52 2
|
6月前
|
SQL 关系型数据库 MySQL
MySQL中一定要遵守的12个SQL规范
本文档提供了12条SQL编写和数据库管理的最佳实践建议,旨在帮助开发者提高SQL查询效率、增强数据库安全性及可维护性。
179 1
|
7月前
|
存储 关系型数据库 MySQL
MySQL数据库开发进阶:精通数据库表的创建与管理22
【7月更文挑战第22天】数据库的创建与删除,数据表的创建与管理
66 1
|
9月前
|
SQL 关系型数据库 MySQL
MySQL中的12个SQL编写规范
SQL良好习惯提升查询清晰度、效率和安全性,包括使用EXPLAIN分析查询计划、DELETE/UPDATE时加LIMIT限制影响范围、为表和字段添加注释、关键字大写缩进、指定INSERT字段名、先测试后执行、表含主键及时间戳字段、Update/Delete需Where条件、用InnoDB引擎、避免SELECT *,选择UTF8字符集和规范索引命名。
MySQL中的12个SQL编写规范
|
7月前
|
存储 关系型数据库 MySQL
阿里巴巴MYSQL 开发规范
阿里巴巴MYSQL 开发规范
415 0
|
8月前
|
关系型数据库 MySQL 数据库
MySQL数据库开发之多表查询数据准备及案例实操
MySQL数据库开发之多表查询数据准备及案例实操
59 1
|
存储 关系型数据库 MySQL
Mysql(一) 数据库的设计与规范
假设,课程的学分发生了变更,那我们就需要把整表关于该课程的学分都要更新一次,但如果我们拆分出课程表,那我们就只需要把课程表中的课程信息更新就行。
234 0

热门文章

最新文章