MySQL开发规范有哪些

64次阅读
没有评论

共计 2213 个字符,预计需要花费 6 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章将为大家详细讲解有关 MySQL 开发规范有哪些,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

基础规范

使用 innodb 存储引擎

表字符集使用 utf-8

所有表添加注释

单表数据量建议控制在 5000W 以内

不再数据库中存储图、文件等大数据

禁止在线上做数据库压力测试

禁止测试、开发环境直连数据库

命名规范

库名表名字段名必须有固定的命名长度,12 个字符以内

库名、表名、字段名禁止超过 32 个字符。须见名之意

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

临时库、表名必须以 tmp 为前缀,并以日期为后缀

备份库、表必须以 bak 为前缀,并以日期为后缀

库、表、字段开发设计规范

禁止使用分区表

拆分大字段和翻身顾问频率低的字段,分离冷热数据

用 HASH 进散表,表名后缀使进制数,下标从 0 开始

按日期时间分表需符合 YYYY[MM][DD][HH] 格式

采用合适的分库分表策略。例如千库十表、十库百表等

尽可能不适用 text、blob 类型

用 decimal 代替 float 和 double 存储精确浮点数

越简单越好:将字符转换为数字、使用 tinyint 来代替 enum 类型

所有字段均为 not null

使用 unsigned 存储非负数

int 类型固定占有 4 字节存储

使用 timestamp 存储时间

使用 int unsigned 存储 ipv4

使用 varbinary 存储大小写敏感的变长字符串

禁止在数据库中存储明文密码,把密码加密后存储

用好数值类型字段

类型

字节

最小值

最大值

tinyint

1

-128

127

smallint

2

-32768

32767

mediumint

3

-8388608

8388607

int

4

-2147483648

2147483647

bigint

8

-9223372036854775808

9223372036854775807

如果数值字段没有那么大,就不要用 bigint

存储 ip 最好用 int 存储而非 char(15)

不允许使用 enum

避免使用 null 字段

null 字段很难查询一花,null 字段的索引需要额外空间,null 字段的复合索引无效。

索引规范

单个表中的索引数量不超过 5 个

单个索引中的字段数不超过 5 个

对字符串使用前缀索引,前缀索引长度不超过 8 个字符

建议优先考虑前缀索引,必要可添加伪列并建立索引

表必须有主键

不使用更新频繁的列作为主键

尽量不选择字符串列作为主键

不使用 uuid md5 hash 这些作为主键 - 太离散

默认使非空的唯一键作为主键

建议选择自增或发号器

重要的 SQL 必须必须被索引,比如 update、delete 语句的 where 条件列、order by、group by、distinct 的字段

多表 join 的字段注意

1. 区分度最大的字段放在前面
2. 核 SQL 优先考虑覆盖索引
3. 避免冗余和重复索引
4. 索引要综合评估数据密度和分布以及考虑查询和更新比例

索引禁忌

1. 不在低基数列上建立索引、例如性别
2. 不在索引列记性数学运算和函数运算

尽量不使用外键

1. 外键用来保护参照完整性,可以业务端实现
2. 对父表和字表的操作会互相影响,降低可用性

索引命名

1. 非唯一索引必须以 inx_字段 1_字段 22. 唯一索引必须以 uniq_字段 1_字段 2

索引字段的默认值不能为空。null 非常影响索引的查询效率。

反复查看和表相关的 SQL,符合最左前缀的特点建立索引。多条字段重复的索引,要修改语句条件字段的顺序,为其建立一条联合索引,减少索引数量。

能使用唯一索引就使用唯一索引

研发要经常使用 explain,如果发现索引选择性差,必须让他们学会使用 hint。

SQL 规范

SQL 语句尽可能简单

事物要简单,整个事物的时间产生过度不要太长

避免使用触发器、函数、存储过程

降低业务耦合度,为 sacle out,sharding 留有余地

避免在数据库中进行数学运算,mysql 不擅长数学运算和逻辑判断

不要用 selecy *,查询那几个字段就 select 那几个字段

sql 中使用 or 的改写成 in,or 的效率没有 in 的效率高

in 里面数字的个数建议 1000 以内

limit 分页注意效率。limit 越大,效率越低。

使用 union all 替代 union

避免使大表 join

使用 group bu 分组、自动排序

对数据的更新要打散后批量更新,不要一次更新太多数据

减少和数据库的交互次数

注意使用性能分析工具

SQL 语句要求所有研发,SQL 关键字全部大写,每个词只允许一个空格

SQL 语句不可以出现隐式转换

能不用 not in 就不用

禁止使用前缀是 % 的 like

不使用负向查询,如 not in、not like

禁止在数据库总跑大查询

使预编译语句,只传参数,比传递 SQL 语句更高效。降低 SQL 注入。

禁止使 order by rand

禁止单条 SQL 语句同时更新多个表

流程规范

所有的建表操作需要提前告知该表涉及的查询 SQL

所有的建表需要确定建立那些索引后才可以建表上线

所有的改表结构、加索引操作都需要涉及到所该表的查询 SQL 发出来通知 DBA 等相关人员

在新建表加字段之前,要求研发至少提前 3 天邮件出来,给 dba 门评估、优化和审核

批量导入、导出数据必须提前通知 DBA 协助观察

禁止线上从库执行后端管理和统计类查询

禁止 super 权限的应用程序账户存在

不再业务高峰期批量更新、查询数据库

关于 MySQL 开发规范有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-16发表,共计2213字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)