一、建表规则
1.表必须有create_time和update_time字段,并且这两列上都有索引
2.auto_increment 默认情况下为1开始
3. 默认字符集为utf8/utf8mb4,不需要指定表或者列的字符和校验规则
bad case : create table table_name
(name varchar(20) charaset utf8 collate utf8_general_ci not null default ‘’ comment ''
) DEFAULT CHARSET=utf8
good case : create table table_name
(name varchar(20) not null default comment '')
4.表和列的注释要有表和列的作用,谁创建的,创建时间。 创建时间必须为当天时间,不要从沙盒导出来就复制到tb上。
例如:
create table table_name
(name varchar(20) not null default ‘’ comment '名字|张三|20180613'
) comment = '表是干什么的|谁创建的|当天的日期'
5.列必须明确指定为not null,不允许出现default null 的字样,看上面的例子。
1)NULL的列使用索引,索引统计,值都更加复杂,MySQL更难优化
2)NULL需要更多的存储空间
3)NULL只能采用IS NULL或者IS NOT NULL
6.必须有主键自增列最好用bigint类型
1)int有负号最高2147483647、无负号最高4294967295 , bigint 有负号9223372036854775807 无负号18446744073709551615
2)无主键的大表在row模式下做delete操作偶发从库会夯住
7.精确度要求高的要用decimal
8.字段类型的长度满足就好不要写的特长
bad case: name varchar(100)
good case:name varchar(10)
9.正常表的列个数不超过30
10.大字段列(text,blob)尽量单独建个表存放
11.禁止使用外键控制关系,由程序实现
影响性能,易造成瓶颈
12.建议使用TINYINT来代替ENUM
ENUM增加选项是要做ddl操作。
13.关键的业务环节,需要有单独的时间和描述字段,不能复用。
二、索引规则
1.单张表索引数量建议控制在5个以内
1)多了会造成数据库不能选择正确的索引
2.组合索引字段数不建议超过5个
1)如果太多索引失效
3.不要在频繁更新的字段上建立索引
4.联合索引最左前缀原则,避免重复建设索引
三、命名规则
1.用户名不得超过16个字符
2.表名列名要清晰,让人一看就明白
3.索引名字加个前缀idx_,唯一索引uniq_
idx_create_time, uniq_create_time
4.备份表的名字在表名后面加上日期和名字
goods_order---->goods_order_20180613_majianli
四、sql规则
1.禁止使用select * 需要哪些字段写哪些字段
2.JOIN关联查询时要确保关联条件的类型是一致的,并且两列都是有索引的
left join 的关系是N:1
join的关系是N:N
3.避免隐式类型转
phone varchar(20)
bad case : select name from tabe_name where phone = 1366666666;
good case : select name from tabe_name where phone = '1366666666';
4.不要在索引列做计算和加函数使用
5.禁止使用select * 查询
*会增加cpu、io、内存、带的消耗
如有覆盖索引*不会使用到
6.insert操作必须指定字段
表结构有变动时不会有影响
7.合理使用子查询,不要太相信网上传言MySQL的子查询不好。
8.学会看执行计划,不是走索引了就可以的。
这个很重要
9.一直都在说拒绝3B
big sql
big transation
big batch
及其复杂的sql放在对应功能的数据库上做运算
10.添加列索引等
添加多个列/索引 对应一个表时用一个alter语句
alter table_name add name1 。。。。。。
alter table_name add name2 。。。。。。
alter table_name add name3 。。。。。。
改成:
alter table_name add name1 。。。。,add name2 。。。。,add name3 。。。。;
四、其他规则
1.引擎使用innodb
2.字符使用utf8或者utf8mb4
3.禁止使用存储过程,视图,触发器等
4.不使用的rds自建数据库的,禁止使用yum安装mysql。要和线上版本一致。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26909803/viewspace-2649305/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26909803/viewspace-2649305/