MySQL数据库规范

一丶数据库规范
1.所有的数据库表名必须以小写字符标识
  并且不能与数据库关键字重合
2.临时必须以tmp为前缀以日期为后缀
3.备份表必须以bak为前缀以日期为后缀
4.相同列名的数据类型必须一致
5.所有的表和字段要添加注释
6.尽量控制单表数据量的大小,建议控制在500万行以内(500万不是mysql数据库的限制)7
7.尽量避免使用mysql分区表,可以使用物理分区表的方式管理大数据
8.禁止在表中建立预留字段 修改一个字段远远大于增加一个字段的消耗
9.禁止在数据库中存储图片,文件等二进制数据
10.禁止在线上做数据库压力测试
11.禁止从开发环境,测试环境直接连接生产环境的数据库
12.禁止查询不需要的字段
二丶索引的规范
1.限制每张表上的索引数量,建议单张表索引不超过5个
2.每个Innodb表必须有一个主键,不使用更新频繁的列作为主键,不使用多列主键
3.常见需要建立索引的字段:
  -在select update delete语句中where从句中出现的列。
  -包含在order by group by distinct中的字段。
      (一般使用组合索引)
  -多表join的关联列。
4.索引列的顺序 
  -区分度最高的列放在联合索引的最左侧 1
  -尽量把字段长度小的列放在联合索引的最左侧 2
  -使用最频繁的列放在联合索引的左侧 3
5.避免建立冗余索引和重复索引
  重复索引:example:primary key(id),index (id),unique index(id)
  冗余索引:index(a,b,c),index(a,b),index(a)
6.对于频繁的查询优先考虑使用覆盖索引(既包含所有的查询字段)
7.尽量避免使用Innodb的外键约束 


三丶数据库字段设计规范
1.优先选择符合存储需要的最小数据类型
  -将字符串转化为数字类型存储 
    如:inet_aton('255.255.255.255')=4294967295
       inet_ntoa(4294967295)='255.255.255.255'
  -对非负整数来说优先使用unsigned
  -varchar(N) n表示字符数,而不是字节数,varchar(255)utf8存储汉字占用765个字节
2.避免使用text,blob,enum数据类型
3.尽可能把所有列定义为not null
4.使用timestamp 4个字节有范围(存储空间比datatime小)或datatime(8个字节)类型存储时间
5.同财务相关的金额类数据,必须使用decimal类型,float和double是非精准浮点数
四丶数据库SQL开发规范
1.建议使用预编译语句进行数据库操作
2.避免数据类型的隐式转换
3.充分利用表上已经存在的索引
  -避免使用双%号的查询条件,如a like '%123%'
  -一个sql只能利用复合索引的一列进行范围查询
  -使用left join或not exists来优化not in操作
4.程序连接不同的数据库使用不同的账号,禁止跨库查询
5.禁止使用select * 必须使用select<字段列表>查询
6.禁止使用不含字段列表的insert语句
7.禁止使用子查询,可以把子查询优化为join操作
8.避免使用join关联太多的表(建议不超过5个)
9.减少同数据库的交互次数(数据库更适合处理批量操作)
10.禁止使用order by rand()进行随机排序,应该在程序中生成一个随机值,然后根据随机值取数据。
11.禁止在where从句中进行函数转换和计算
   例如:where date(createtime)='20160901' 
   ->where createtime>='20160901' and createtime<'20160902'
12.在明显不会用重复值是使用union all而不使用union
13.拆分复杂的大sql为多个小sql


五丶数据库操作行为规范
1.超过100万行的批量写操作,要分批多次进行操作
2.禁止为程序使用的账号赋予super权限
3.对于程序连接数据库账号,遵循最小原则
  -程序使用的数据库账号只能在一个db下使用,不准跨库使用
  -程序使用的账号原则上不准有drop权限
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值