mysql数据库设计规范

数据库设计规范

数据库命名规范

规范 备注
数据库对象名称统一使用小写字母并用下划线分割 eg:mkt_tool
数据库对象名称禁止使用MySQL保留关键字 eg:password,from等
数据库对象名称作到见名思义,最长不超过32个字符 尽量的精简、明确
临时表以tmp为前缀,日期为后缀 eg:mp_user_20180921
备份表以bak为前缀,日期为后缀 eg:bak_user_20180921
全部存储相同数据的列名和列类型必须一致 eg:a表的uid与b表的uid数据类型与列类型一致

数据库基本设计规范

规范 备注
全部数据表使用innodb做为存储引擎 5.6之后做为默认引擎,支持事务、行级锁、更好的恢复性,高并发下性能更好
数据库和表的字符集统一使用UTF8 主要是由于避免因为字符集转换产生的乱码,其次utf8包含的字符更多,一个汉字占3个字节
数据表和字段须要添加注释 后续维护方便
单表数据量控制在500万之内 单表存储的数据量大小限制取决于存储设置和文件系统
尽可能作到冷热数据分离,减少表的宽度 避免查询无用的数据
禁止在表中预留字段,禁止在数据库中存储图片及文件等二进制数据 按需增长,避免表数据快速增加
禁止在线上作数据库压力测试
禁止开发环境直接链接生产环境数据库 避免数据脏乱

数据库索引规范

规范 备注
限制每张表索引的数量,单表索引不超过5个 索引不是越多越好,增长查询效率的同时,会下降更新的效率
每一个innodb表必须有一个主键 不使用频繁更新的键,不使用hash,字符串,MD5做为主键,优先选取自动增加的列做为主键
如何选择联合索引的顺序 区分度最高的放在索引的最左侧;字段长度最小的放在最左侧;使用度最频繁的列放在最左侧
避免创建冗余度和重复列索引增长了优化器生成查询计划的时间 对于冗余索引并不会提升索引的性能,反而影响查询计划的生成
对于频繁的查询优先考虑使用覆盖索引 避免Innodb进行索引的二次查找
尽可能避免使用外键 外键用于保证参照完整性,建议在业务端实现外键的约束,由于每次写操做都须要检测外键约束从而下降性能。

数据库字段规范

规范 备注
优先选择存储须要的最小的数据类型 int类型相比字符串类型存储空间更小,优先使用无符号的整型存储
避免使用text、bolb、enum类型 使用text类型的时候注意只能使用前缀索引,不能有默认值
尽量的定义为NOT NULL 索引NULL须要额外的空间来保存,进行比较和计算时须要对NULL进行特殊处理
避免使用字符串存储日期型的数据,使用TIMESTAMP或DATETIME存储 一、没法使用日期函数进行比较和计算;二、用字符串存储须要占用更多的空间
使用decimal类型存储金额类数据 一、decimal在计算时不丢失精度,占用的空间由定义的宽度决定;二、可用于存储比bigint更大的数据

数据库SQL开发规范

规范 备注
使用预编译进行数据库操做 一、一次解析,屡次使用重复使用执行计划;二、避免动态SQL带来的SQL注入;
避免数据类型的隐式转换 隐式转换、会致使索引失效 eg:select * from test where id = '1'
充分利用已经存在的索引 一、避免使用双%的查询,使用后%进行替换;二、一个SQL只能利用到复合索引中的一列进行范围查询;三、使用left join或not exists来优化not in操做
禁止使用select * 查询 一、消耗更多的CPU和io资源;二、没法使用到覆盖索引;
禁止使用不含字段列表的INSERT语句 明确指定insert的字段
避免使用子查询,能够把子查询优化为join操做 一、子查询的结果集没法使用到索引;二、子查询产生临时表操做,数据量大会影响效率;三、产生的临时表消耗过多的CPU和IO
避免使用JOIN关联太多的表 一、每join一个表会占用一部份内存(join_buffer_size);二、会产生临时表操做,影响查询效率;三、MySQL容许关联61个表,最多不超过5个
减小同数据库交互的次数 一、数据库适合批量处理,避免屡次请求数据库;二、合并多个相同的操做到一块儿,如一次修改多个字段
使用in代替on in的值不超过500个,in能够有效的利用索引的
禁止使用order by rand()排序 order by rand()会把全部符合条件的数据装到内存中排序获取
where从句中禁止对列进行函数转换和计算 对列进行函数转换会致使没法使用到索引 eg:where date(time) = '20180123'
明显不会有重复值的状况下使用UNION ALL UNION会把数据放到临时表进行去重
拆分复杂的大SQL为多个小SQL MySQL一个SQL只能使用一个CPU计算,SQL拆分后能够经过并行执行提升效率

数据库操做行为规范

规范 备注
超过100万行的数据批量写操做,须要分批屡次操做 一、大批量的写操做,容易形成主从延迟 二、产生大量的日志 三、避免产生大事务操做
大表结构修改 直接修改大表容易进行锁表,使用pt-online-schema-change修改表结构
禁止为程序使用的帐户授予root权限,遵循权限最小原则 程序使用的帐户不许有drop权限,程序使用的帐户只能链接到一个数据库
相关文章
相关标签/搜索