前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL开发规范.pdf

MySQL开发规范.pdf

作者头像
码农编程进阶笔记
发布于 2022-06-29 06:26:47
发布于 2022-06-29 06:26:47
7750
举报

禁止项:

1、 禁止使用 select * 等查询

当查询所有字段(select *)会导致下列问题 1. 增加网络带宽消耗 2. Select *必然会导致回表查询/返回数据,使覆盖索引失效

3. 如果表结构有修改比如增加多列,返回多余数据比较危险

2、 禁止库名、表名、字段名使用 MySQL 保留字

当库名、表名、字段名等属性含有保留字时,SQL 语句必须用反引号引用属性名称,这将使得 SQL 语句书写、SHELL 脚本中变量的转义、在线修改表结构等变得非常复杂。

3、 禁止使用分区表 Mysql 分区表技术还是不是很成熟,而且对分区键有严格要求,分区表变大后对于表备份恢复都有很大困难,建议在业务端使用 sharding 技术。

4、 禁止在数据库中存储明文密码 如果需要存储 MySQL 密码可以用 MySQL 内置函数 password()对明文密码进行 MD5 进行加密。

5、SQL 中禁止出现 now()、rand()、sysdate()、current_user()等不确定结果的 函数。

建议不确定的时间在程序层取出时间,语句级复制场景下,引起主从数据不一致; 不确定值的函数,产生 的 SQL 语句无法利用。

6、 禁止使用 VARBINARY、BLOB 存储图片、文件等,使用 VARCHAR(N),N 尽 量可能小

7、 禁止在列上进行运算 在列上运算将导致 Mysql 索引失效而进行全表扫描。

规范项: 1、建表字符集使用 UTF8 或者 UTF8mb4

UTF8 统一而且通用,不会出现转码出现乱码风险。如果有表情符号需求的,可以使用 utf8mb4

2、表必须有主键,推荐使用 UNSIGNED 自增列作为主键

表没有主键,INNODB 会默认设置隐藏的主键列;没有主键的表在定位数据行时效率会非常低而且降低基于行复制的效率。在建表时务必定义一个自增列做主键(与业务逻辑无关,而应用程序的数据如果有唯一的候选列可以做成唯一键),再次重申 INNODB 存储引擎中每张表一定要有一个于业务无关的自增列做主键。

建议项:

1、建议慎重使用前缀匹配的模糊查询

前缀匹配会导致直接全表扫描或全索引扫描,性能最差,无任何扩展,基本不可接受。

2、建议所有字段均定义为 NOT NULL,设置 default 值。

定义为 Not Null 原因如下:

  1. MySQL 数据库中每个为 NULL 的列都需要额外的 1 个字节进行存储,浪费空间资源。
  2. B 树索引时不会存储 NULL 值,如果索引字段可以为 NULL,索引效率会下降。
  3. 建议用 0、特殊值或空串代替 NULL 值。

3、建议查询中避免隐式转换 MySQL 中如果查询字段与表定义字段不同则会发生隐式转换,从而无法用到索引导致查询效率低下。

4、建议不要在 MySQL 数据库中存放业务逻辑

数据库是有状态的服务,变更复杂而且速度慢,如果把业务逻辑放到数据库中,将会限制业务的快速发展。建议把业务逻辑提前,放到前端或中间逻辑层,而把数据库作为存储层,实现逻辑与存储的分离。

5、建议不要使用子查询 对于子查询,mysql 会对子查询结果返回给外部表,并对外部表进行全表扫描

6、建议将大字段、访问频率低的字段拆分到单独的表中存储,分离冷热数据

当我们的表中存在类似于 TEXT 或者是大的 VARCHAR 类型的大字段的时候,如果我们大部分访问这张表的时候都不需要这个字段,我们就该将其拆分到另外的独立表中,以减少常用数据所占用的存储空间。这样做的一个明显好处就是每个数据块中可以存储的数据条数可以大大增加,既减少物理 IO次数,也能大大提高内存中的缓存命中率。

7、建议用 in() /union 替换 or,并注意 in 的个数(个数多少依照具体情况而定)

8、建议尽量不使用 mysql 存储过程、触发器、函数等(依照具体情况而定)

容易将业务逻辑和 DB 耦合在一起,并且对于目前数据量存储过程、触发器、函数等没有任何优势(存储过程、函数对大数据量的处理和复杂业务逻辑很有优势),而且 mysql 存储过程还有一定 BUG。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农编程进阶笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL开发规范与使用技巧总结
1.库名、表名、字段名必须使用小写字母,并采用下划线分割。 a)MySQL有配置参数lower_case_table_names,不可动态更改,Linux系统默认为 0,即库表名以实际情况存储,大小写敏感。如果是1,以小写存储,大小写不敏感。如果是2,以实际情况存储,但以小写比较。 b)如果大小写混合使用,可能存在abc,Abc,ABC等多个表共存,容易导致混乱。 c)字段名显示区分大小写,但实际使⽤用不区分,即不可以建立两个名字一样但大小写不一样的字段。 d)为了统一规范, 库名、表名、字段名使用小写字母。
Java后端技术
2018/08/09
6650
MySQL开发规范
索引是一把双刃剑,它可以提高查询效率但也会降低插入和更新的速度并占用磁盘空间
用户7657330
2020/08/14
8730
Mysql开发规范
命名规范的对象,是指数据库SCHEMA、表TABLE、字段COLUMN、索引INDEX、约束CONSTRAINTS等
用户3876103
2024/11/03
1270
【笔记】Mysql 数据库操作规范
【FAQ-1-01】 库名、表名、字段名必须使⽤小写字母,并采⽤下划线分割。 a)MySQL 有配置参数 lower_case_table_names,不可动态更改,linux 系统默认为 0,即库表名以实际情况存储,⼤小写敏感。如果是 1,以⼩写存储,⼤小写不敏感。如果是 2,以实际情况存储,但以小写⽐较。 b) 如果⼤小写混合使用,可能存在 abc,Abc,ABC 等多个表共存,容易导致混乱。 c) 字段名显⽰区分⼤⼩写,但实际使用不区分,即不可以建立两个名字⼀样但大小写不一样的字段。 d) 为了统⼀规范,库名、表名、字段名使⽤⼩写字母。
redszhao
2021/08/09
1.5K0
【笔记】Mysql 数据库操作规范
互联网MySQL开发规范
7、索引命名:非唯一索引必须以 idx_字段1_字段2命名,唯一所以必须以uniq_字段1_字段2命名,索引名称必须全部小写
用户10002156
2023/08/07
2330
互联网MySQL开发规范
开发规范(一):Mysql篇
] 10. 表字段注释,每个字段必须设置注释说明; 11. 表字段注释,状态类型的字段必须说明取值规则(比如性别sex取值规则)
程序员朱永胜
2023/08/21
3160
MySQL开发规范
1)    使用InnoDB存储引擎 2)    数据库字符集使用UTF8,校对字符集使用utf8_general_ci 3)    所有表、字段都尽量添加注释 4)    库名、表名、字段名使用小写字母,禁止超过32个字符,须见名知意 5)    非唯一索引以 “idx_字段1_字段2” 命名,唯一索引必须以 “uniq_字段1_字段2” 命名
动力节点Java培训
2019/01/11
1.4K1
MySQL数据库开发规范知识点速查
数据库设计规范 命名规范 基本设计规范 索引设计规范 字段设计规范 SQL开发规范 操作行为规范 命名规范 对象名称使用小写字母并用下划线分割 禁止使用MySQL保留关键字 见名识义,最好不超过32个
linxinzhe
2018/04/16
1.6K0
MySQL数据库开发规范知识点速查
公司用的 MySQL 团队开发规范,太详细了,建议收藏!
数据库对象是数据库的组成部分,常见的有以下几种:表(Table )、索引(Index)、视图(View)、图表(Diagram)、缺省值(Default)、规则(Rule)、触发器(Trigger)、存储过程(Stored Procedure)、 用户(User)等。命名规范是指数据库对象如数据库(SCHEMA)、表(TABLE)、索引(INDEX)、约束(CONSTRAINTS)等的命名约定。
用户1516716
2021/11/23
9800
数据库设计原则与开发规范,你知道多少?
对一个程序来说,由于数据库资源的绝对宝贵性(无法无限扩展),所以数据库必须合理的运行使用。以保证高效、稳定、安全的运行。数据库设计得好, 系统健步如飞;数据库设计不好,系统蹒跚前行。今天介绍数据库的设计原则和规范,你知道得越多,你不知道的越多。你知道多少呢?
可可的测试小栈
2020/12/31
1.8K0
大型互联网公司使用的数据库设计规范
2、 数据库命名规范,统一:hs_xxxx;表名不超过40个字符(即最大只能40个字符)
阿泽
2019/09/17
1.9K0
大型互联网公司使用的数据库设计规范
MySQL数据库设计规范
1、MYSQL配置参数lower_case_table_names,不可动态更改,LINUX系统默认为0,即库表名以实际情况存储,大小写敏感。如果是 1,以小写存储,大小写不敏感。如果是 2,以实际情况存储,但以小写比较。
俊才
2020/02/19
2.4K0
mysql数据库规范
大家好,今天我们来聊一聊MySQL数据库规范,MySQL是一个广泛使用的开源关系型数据库管理系统,良好的规范可以提高数据库的性能、可靠性和可维护性。下面是一些MySQL数据库规范的重要指南,还附了一些索引失效的常见情况和关键字列表,希望对大家有所帮助。
修己xj
2023/08/25
3490
mysql数据库规范
【干货】MySQL数据库开发规范
所有的数据库对象名称必须使用小写字母并用下划线分割(MySQL大小写敏感,名称要见名知意,最好不超过32字符) 所有的数据库对象名称禁止使用MySQL保留关键字(如 desc、range、match、delayed 等,请参考 MySQL官方保留字 【https://dev.mysql.com/doc/refman/5.7/en/keywords.html】 ) 临时库表必须以tmp为前缀并以日期为后缀(tmp_) 备份库和库必须以bak为前缀并以日期为后缀(bak_) 所有存储相同数据的
lyb-geek
2018/12/29
1.3K0
MySQL数据库设计规范
MySQL数据库与 Oracle、 SQL Server 等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。本规范旨在帮助或指导RD、QA、OP等技术人员做出适合线上业务的数据库设计。在数据库变更和处理流程、数据库表设计、SQL编写等方面予以规范,从而为公司业务系统稳定、健康地运行提供保障。
物流IT圈
2019/07/16
2.3K0
MySQL数据库设计规范
MySQL命名、设计及使用规范--------来自标点符的《MySQL命名、设计及使用规范》
数据库环境 dev:开发环境,开发可读写,可修改表结构。开发人员可以修改表结构,可以随意修改其中的数据但是需要保证不影响其他开发同事。 qa:测试环境,开发可读写,开发人员可以通过工具修改表结构。 sim:模拟环境,开发可读写,发起上线请求时,会先在这个环境上进行预执行,这个环境也可供部署上线演练或压力测试使用。 real:生产数据库从库(准实时同步),只读环境,不允许修改数据,不允许修改表结构,供线上问题查找,数据查询等使用。 online:线上环境,开发人员不允许直接在线上环境进行数据库操作,如果需要操
庞小明
2018/06/01
5.8K0
Mysql数据库对象命名规范
数据库对象是数据库的组成部分,常见的有以下几种:表(Table )、索引(Index)、视图(View)、图表(Diagram)、缺省值(Default)、规则(Rule)、触发器(Trigger)、存储过程(Stored Procedure)、 用户(User)等。命名规范是指数据库对象如数据库(SCHEMA)、表(TABLE)、索引(INDEX)、约束(CONSTRAINTS)等的命名约定。
jwangkun
2021/12/23
6.2K0
值得收藏:一份非常完整的 MySQL 规范
· 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)
Java团长
2019/04/09
7930
值得收藏:一份非常完整的 MySQL 规范
MySQL使用规范手册,程序员必知必会
一个平台或系统随着时间的推移和用户量的增多,数据库操作往往会变慢;而在Java应用开发中数据库更是尤为重要,绝大多数情况下数据库的性能决定了程序的性能,如若前期埋下的坑越多到后期数据库就会成为整个系统的瓶颈;因此,更规范化的使用MySQL在开发中是不可或缺的。
挨踢小子部落阁
2019/10/16
8200
MySQL高性能优化规范建议,速度收藏
•所有数据库对象名称必须使用小写字母并用下划线分割•所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)•数据库对象的命名要能做到见名识意,并且最后不要超过 32 个字符•临时库表必须以 tmp_为前缀并以日期为后缀,备份表必须以 bak_为前缀并以日期 (时间戳) 为后缀•所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低)
用户5224393
2019/07/23
7880
相关推荐
MySQL开发规范与使用技巧总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档