Mysql视频教程栏目介绍MySQL的开发规范
推荐(免费):mysql视频教程
基础规范
使用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的字段注意
<p>1.区分度最大的字段放在前面<br>2.核SQL优先考虑覆盖索引<br>3.避免冗余和重复索引<br>4.索引要综合评估数据密度和分布以及考虑查询和更新比例<br></p>
索引禁忌
<p>1.不在低基数列上建立索引、例如性别<br>2.不在索引列记性数学运算和函数运算<br></p>
尽量不使用外键
<p>1.外键用来保护参照完整性,可以业务端实现<br>2.对父表和字表的操作会互相影响,降低可用性<br></p>
索引命名
<p>1.非唯一索引必须以 inx_字段1_字段22.唯一索引必须以 uniq_字段1_字段2<br></p>
索引字段的默认值不能为空。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权限的应用程序账户存在
不再业务高峰期批量更新、查询数据库
Atas ialah kandungan terperinci 记录MySQL开发规范. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!