数据库设计规范

2018-10-13  本文已影响0人  陈柴盐

1.数据库设计规范

所有的数据库对象名称必须使用小写字母并用下划线分割

所有的数据库对象名称禁止使用mysql的保留关键字

数据库对像的命名要能做到见名识义,并且最好不要超过32个字符

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

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

所有表和字段都需要添加注释使用comment从句添加表和列的备注

尽量控制单表数据量的大小,建议控制在500万以内500万并不是MySQL数据库的限制,可以用历史数据归档,分库分表等手段来控制数据量大小

禁止在表中建立预留字段

禁止在数据库中存储图片,文件等二进制数据

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

禁止从开发环境,测试环境直连生产环境数据库

2.索引设计规范

限制每张表上的索引数量,建议单张表索引不超过5个

禁止给表中的每一列都建立单独的索引

每个Innodb表必须有一个主键,不使用UUID,MD5,HASH,字符串列作为主键,不使用更新频繁的列作为主键,不使用多列主键

主键建议选择使用自增ID值

区分度最高的列放在联合索引的最左侧

尽量把字段长度小的列放在联合索引的最左侧

使用最频繁的列放到联合索引的左侧

对于频繁的查询优先考虑使用覆盖索引

3.数据库字段设计规范

优先选择符合存储需要的最小的数据类型,例如:将字符串转化为数字类型存储,将IP转换为数字INET ATON(′255.255.255.255')=4294967295

对于非负型的数据来说,要优先使用无符号整型来存储,无符号相对于有符号可以多出一倍的存储空间

VARCHAR(N)中的N代表的是字符数,而不是字节数,使用UTF8存储汉字Varchar(255)=765个字节,过大的长度会消耗更多的内存 

避免使用TEXT、BLOB数据类型,text有64k大小,一般的评论、备注用不到64k,所以采用varchar类型存储

避免使用ENUM数据类型,修改ENUM值需要使用ALTER语句,ENUM类型的ORDER BY操作效率低,需要额外操作

尽可能把所有列定义为NOT NULL,索引NULL列需要额外的空间来保存,所以要占用更多的空间,进行比较和计算时要对NULL值做特别的处理

字符串存储日期型的数据(不正确的做法)缺点1:无法用日期函数进行计算和比较缺点2:用字符串存储日期要占用更多的空间使用TIMESTAMP或DATETIME类型存储时间

1.非精准浮点:float,double2.精准浮点:decimal,同财务相关的金额类数据,必须使用decimal类型

4.数据库SQL的规范

4.1建议使用预编译语句进行数据库操作

select *  from user

如上,数据库操作SQL时需要将星号转换为对应的列,消耗数据库的资源

4.2避免数据类型的隐式转换

select name,phone from customer where id='111'

如上,数据库中id为整形,而参数是字符串,数据库操作时会进行参数转换耗费时间

4.3避免使用双%号或前置%的查询条件。如a like '%123%'或a like '%123',这些可能无法使用索引,需要的话使用后置%

4.4禁止使用不含字段列表的INSERT语句

insert into t values(a''b''c');  (错误)

insert into t(c1,c2,c3)values('a','b','c'); (正确)

目的:可减少表结构变更带来的影响

4.5避免使用子查询,可以把子查询优化为join操作,子查询会产生临时表操作,如果子查询数据量大则严重影响效率

4.6避免使用JOIN关联太多的表

4.7减少同数据库的交互次数数据库更适合处理批量操作,合并多个相同的操作到一起,可以提高处理效率

4.8使用in 代替or,in的值不要超过500个,in 操作可以有效的利用索引

4.9禁止使用order by rand0进行随机排序,推荐在程序中获取一个随机值,然后从数据库中获取数据的方式

4.10WHERE从句中禁止对列进行函数转换和计算,对列进行函数转换或计算会导致无法使用索引

where date(createtime)=‘20160901'(不推荐)

where createtime>=‘20160901'and createtime<′20160902'(推荐)

4.11在明显不会有重复值时使用UNION ALL 而不是UNION,UNION会把所有数据放到临时表中后再进行去重操作,UNION ALL 不会再对结果集进行去重操作

4.12拆分复杂的大SQL为多个小SQL,MySQL一个SQL只能使用一个CPU进行计算,SQL拆分后可以通过并行执行来提高处理效率    

5.数据库操作规范

5.1超100万行的批量写操作,要分批多次进行操作,大批量操作可能会造成严重的主从延迟,binlog日志为row格式时会产生大量的日志,避免产生大事务操作

5.2对于大表使用pt-online-schema-change修改表结构

5.3禁止为程序使用的账号赋予super权限

上一篇 下一篇

猜你喜欢

热点阅读