Mysql规范

数据库命名规范

所有数据库对象名称必须使用小写并用下划线进行分割
所有数据库对象名称禁止使用mysql保留关键字
http://dev.mysql.com/doc/refman/5.7/en/keywords.html
数据库对象名称命名要能做到见名识义,并且最好不要超过32个字符
所有的临时库表必须以tmp_为前缀并以日期为后缀 备份库备份表必须以bak_为前缀并以日期为后缀
所有存储相同数据的列名和列的类型必须一致 (关联列)

数据表规范

所有表必须使用innodb的存储引擎
原因
1.mysql5.6以后的默认的引擎
2. 支持事务,行级锁,更好的回复性,在高并发下的性能更好
数据库和表的字符集统一使用utf8,统一字符集可以避免由于字符集转化产生的乱码
所有的表和字段都需要添加注释 从一开始就进行数据字典的维护
尽量控制单表的数据量大小,建议控制在500万以内 500万并不是mysql数据库的限制,可以用历史数据过当,分库分表等手段控制数据表的大小
谨慎使用mysql分区表,原因 分区表在无理数表现为多个文件在逻辑上表现为一个表来使用,实际上是对i/o的优化,谨慎选择分区键,跨分区查询效率可能更低
尽量做到冷热数据分离,减少表的宽度
mysql限制每张表最多有4096列,每个列的大小不能大于566个字节 为了减少磁盘i/o,保证热数据的内存缓存命中率,利用更有效的利用缓存,避免读入冷数据
要把经常一起使用的列放入一个表中
禁止在数据库中存储图片,文件等二进制数据
禁止在线上在数据库压力测试
禁止从开发环境,测试环境。连接生产环境

索引添加规范

限制每张表上的索引数量,建议单张表索引不超过5个
索引可以增加查询的效率,但同样也会降低插入和更新的效率
禁止给表中的每一列都建立单独的索引
每个innodb表必须有一个主键
不要使用uuid,md5,hash,字符串列作为主键
我们要在哪些列上建立索引
在 select update delete 语句的where从句中出现的列上建立索引
包含在order by,group by ,distinct中的字段上建立索引,
在出现在where 从句和order by从句的多个列上,建立一个联合索引比每个字段都单独建立一个索引的效果更好
在多个表的join的关联列上建立索引
如何选择联合索引列的顺序
区分度最高的列放在联合索引的最左边 区分度:列中不同数据的数量和总行数的比例,
尽量把字段长度小的列放在联合索引的最左侧
使用最频繁的列放到联合索引的最左侧
避免建立冗余索引和重复索引 主键是唯一索引
对于频繁的查询优先考虑使用覆盖索引 就是包含了所有需要查询字段的索引
避免innodb表进行索引的二次查找 可以把随机io变为顺序io加快查询效率
尽量避免使用外键

数据库字段设计规范

优先选择符合存储需要的最小的数据类型
将字符串转换为数字类型存储
尽可能把所有的列定义为不为空
使用timestamp或DAtetime类型存储时间
同财务相关的金额数据,必须使用decimal类型 在计算时不会丢失精度 占用空间由定义宽度决定 可用于比bigint更大的整数数据

数据库sql开发规范

建议使用预编译语句进行数据库操作,一次解析 多次使用
避免数据类型的隐式转换 隐式转换会产生索引失效
必须使用select 字段列表查询 select * 会消耗更多的cpu和io
禁止使用子查询,可以把子查询优化为join操作 子查询的结果集无法使用索引
避免使用join关联太多的表 mysql中最多只能关联61个表 建议不超过5个
减少同数据库的交互次数
使用in 代替or in能更有效的利用索引
禁止使用 order by rand()进行随机排序 会把表中的所有符合条件的数据装载到内存中进行排序 会消耗大量的cpu和io
建议在程序中获取一个随机数,然后从数据库获取数据的方式
where从句中禁止对列进行函数转换和计算,对列进行函数转换或计算会导致无法使用索引
在明显不会有重复值时使用union all 而不是union
拆分复杂的大sql为多个小sql mysql一个sql只能使用一个cpu进行计算 ,sql拆分后可以通过并行执行来提高处理效率

数据库操作的行为规范

超100万行的批量写操作,要分批进行多次操作 大批量的操作可能你会造成严重的主从延迟
避免产生大事务操作
对于达标使用pt-online-schema-change修改表结构
禁止为程序使用的账号赋予super权限
对于程序连接数据库账号,遵循权限最小原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值