SQL 管理规范

一、库表规范
1. 所有库、表、字段一律采用小写字母加下划线的命名方式,禁止大写字母和汉语拼音等其他命名,命名 简洁明了,见名知义,长度控制在32字符以内;
正例:db_fund,tbl_order_detail,user_id
反例:TBL_ORDER,yonghuming,field1,user_Name
2. 所有表均采用innodb存储引擎;
mysql特点支持众多的存储引擎,如myisam,innodb,tokudb
innodb 支持事物,健壮,5.5之后mysql默认使用的存储引擎
3. 所有表的字符集使用utf8,如需要使用utf8mb4,可单独申请;
原因:utf8万国符,支持中文 占用空间:latin1< utf8 < utf8mb4
4. 所有表、字段都需要添加注释;
原因:方便维护
例子:status ‘0-未支付,1-已支付’
5. 每个表必须有主键;
采用连续自增id的方式,利于数据的插入
6. 所有表字段设为not null,设置default值;
已经存在的数据可以update到默认值

7. 禁止使用外键约束;

8.字段的选用原则;
1)选用的最短小数据类型:运算快,占用空间小 1.ip地址转换成int,而不是char(15)
2)金额类型选用decimal 更精确
3)使用tinyint来代替enum,boolean 形如status ,sexual等字段
4)datetime和timestamp 时间戳优先选择timestamp 有些只要日期的字段可以选择date

9. 控制表字段的数量,表的字段太多可考虑分拆成多个小表,建议数量控制在30以内;
10. 禁止在数据库中保存图片,视频等信息。


二、索引规范

1.索引的命名;
1) 主键索引 :pri_字段名称_字段名称(字段太长可用缩写)
2) 唯一索引 :uiq_字段名称_字段名称(字段太长可用缩写)
3) 一般索引 :idx_字段名称_字段名称(字段太长可用缩写)
正例:idx_user_id
反例:index_a,idx_1

2. 优先在经常出现在where条件后的字段上建立索引;
例如 经常使用时间范围的查询,就可以在create_time 等字段上建立索引;
3. 禁止在选择性低的列上建立索引;
例如 不要sex,status等字段上建立索引
4. 索引中的字段控制在5个以内;

5. 制单表的索引的数量,建议:5个以内;
原因:索引加快查询速度,但索引本身需要占用空间,而且会降低插入删除更新的速度

6. 避免重复的索引;
原因:重复的索引浪费空间,增加负担,毫无益处。
7. 多列索引要把索引选择性高的放在前面,注意最左前缀原则;
原因:把选择性高的列放在前面,可以快速的排除大量数据
idx_create_time_status(createtime,status,sex)
√ select x,xfrom table where create_time=
√ select x,xfrom table where create_time= ,status=
√ select x,x from table where create_time=,status=,sex=
× select x,x from table where status=
× select x,x from table where statu= ,sex=
× select x,x from table where sex=


三、sql语句规范

1.禁止 select * 语句,只读取需要用到的字段;
2. 禁止在where条件的列上使用函数;
原因:函数的使用会是所在列的索引失效
select x from table where LEFT(col_name,4)='acbs'

3. 避免形如like '%xxx'的语句,可以like 'abc%';

4. 多表连接的执行的sql语句必须在每个字段前加上表前缀;
√ select a.col1,b.col2,c.col3 from a,b,c where a.id=b.id and b.uid=c.uid;
× select col1,col2,col3 from a,b,c where a.id=b.id and b.uid=c.uid

5. 避免where字段的隐式转换;
例如 整数列的和字符串的比较: select x from table where col_int_type='xxx';

6. union all 替代 union;
不需要排序,减少性能消耗

7. 用union替换or;
如:select a from table where a=1 or c=1
改为
select a from table where a=1 union all
select a from table where c=1

8. 拒绝大事务;
例如:在一个事务里进行多个select,多个update,如果是高频事务,会严重影响MySQL并发能力,因为事务持有的 锁等资源只在事务rollback/commit时才能释放。但同时也要权衡数据写入的一致性。

四、行为规范

1. 禁止在dba不知情的情况下从线上数据库导出数据;
2. 需要执行sql脚本的文件统一命名: 数据库名称 +日期 +编号如 :fund1106-1.sql,sql语句单独成行,除了注释不得有任何其他中文,标点符号等,文件的格式为sql,sql脚本需要包含回滚语句;
3. 复杂sql语句上线前审核;
4. 线上刷数据需要通过审核,才能执行;
5. 任何数据库变更必须通知dba;
6. 使用navicat 、mysql workbench 等mysql客户端在完成操作后,关闭连接;
7. 数据库遇到故障请勿盲目操作,请联系dba。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值