您的位置:首页 > 数据库 > MySQL

mysql开发规范

2018-03-27 11:56 316 查看
近日,无意间看到《京东 mysql开发规范》,发现里面的很多规范就是自己平时所参照的,特此取出里面的内容,以供参考
基本规范1、使用INNODB存储引擎 5.5以后的默认引擘,支持事务,行级锁,更好的恢复性,高并发下性能更好,对多核,大内存,ssd等硬件支持更好2MySQL字符集统一使用UTF8,不会有转换产生乱码风险3、所有表都需要添加注释,单表数据量建议控制在1000万以内4、不在数据库中存储图片、文件等大数据5、禁止在线上做数据库压力测试6、禁止从测试、开发环境直连线上数据库1、库名、表名、字段名必须使用小写字母并采用下划线分割,禁止使用中横线2、库名、表名、字段名禁止超过32个字符,须见名知意,统一规范易于辨识3库名、表名、字段名禁止使用MySQL保留关键字4临时库、临时表名必须以tmp为前缀并以日期为后缀5备份库、备份表名必须以bak为前缀并以日期为后缀
库表设计规范1、不建议使用分区表,MySQL的分区表实际性能不是很好,且管理维护成本较高2、拆分大字段和访问频率低的字段,分离冷热数据3、用HASH进行散表,表名后缀使用十进制数,下标从0开始首次分表尽量多的分,避免二次分表,二次分表的难度和成本较高4、按日期时间分表需符合YYYY[MM][DD][HH]格式5、采用合适的分库分表策略6、单表字段数控制在20以内
索引设计规范1、单张表中索引数量不超过52、单个索引中的字段数不超过53innodb主键推荐使用自增列,主键不应该被修改,字符串不应该做主键,如果不指定主键,innodb会使用唯一且非空值索引代替4、如果是复合索引,区分度最大的字段放在索引前面5、核心SQL优先考虑覆盖索引6、区分度最大的字段放在索引前面7、避免冗余或重复索引:合理创建联合索引(避免冗余),index(a,b,c)相当于index(a)index(a,b)index(a,b,c)8、不在低基数列上建立索引,例如‘性别’9、不在索引列进行数学运算和函数运算10、尽量不要使用外键。对父表和子表的操作会相互影响,降低可用性11、不使用%前导的查询,如like“%xxx,无法使用索引12、不使用反向查询,如not in / not like 无法使用索引,导致全表扫描全表扫描13、索引不是越多越好,按实际需要进行创建
字段设计规范1、禁止使用TEXTBLOB类型2、将字符转化为数字3、使用TINYINT来代替ENUM类型4、字段长度尽量按实际需要进行分配,不要随意分配一个很大的容量5、如果可能的话所有字段均定义为not null6、使用UNSIGNED存储非负整数。同样的字节数,存储的数值范围更大。如tinyint有符号为-128-127,无符号为0-2557INT类型固定占用4个字节存储8、使用TIMESTAMP存储时间。因为TIMESTAMP使用4字节,DATETIME使用8个字节,同时TIMESTAMP具有自动赋值以及自动更新的特性9、禁止在数据库中存储明文密码
SQL语句规范1、尽量避免相同语句由于书写格式的不同,而导致多次语法解析2、避
10227
免隐式转换,会导致索引失效
3、禁止使用存储过程、触发器、视图等,让数据库做最擅长的事,降低业务耦合度4、避免使用大表的join5、避免在数据库中进行数学运算,容易将业务逻辑和DB耦合在一起,MySQL不擅长数学运算和逻辑判断,无法使用索引6、减少与数据库的交互次数7、拒绝大SQL,拆分成小SQL,充分利用query cache,充分利用多核CUP8、使用in代替orin的值不超过10009、禁止使用order by 因为ORDER BY 会将数据从磁盘中读取,进行排序,会消耗大量的IOCPU,可以在程序中进行相应的排序10、使用union all而不是union11、禁止单条SQL语句同时更新多个表12、不使用select *,避免消耗cpu和硬盘IO、消耗网络带宽13、禁止使用test
行为规范1、批量导入、导出数据必须提前通知DBA协助观察;2、批量更新数据,如update,delete操作,需要DBA进行审查,并在执行过程中观察服务负载等各种状况,进行DDL/DML操作时,需要研发在场执行,特别是执行更新、删除数据库和删除库表3、禁止在从库上执行后台管理和统计类复杂的功能查询;4、禁止有super权限的应用程序账号存在;5、产品出现非数据库导致的故障时及时通知DBA协助排查;6、促销活动或上线新功能必须提前通知DBA进行流量评估;7、如果需要数据库数据,请及时联系DBA进行恢复8、对单表的多次alter操作必须合并为一次操作;9、不在MySQL数据库中存放业务逻辑,禁止使用存储过程;10、重大项目的数据库方案选型和设计必须提前通知DBA参与;11、对特别重要的库表,提前与DBA沟通确定维护和备份优先级;12、不在业务高峰期批量更新、查询数据库;13、提交线上建表需求,必须详细注明所有相关SQL14、合理使用数据库服务器资源;15、应用连接池中最大连接数的合理设置;16、应用连接数据库使用域名连接,不使用IP.文章内容摘自《京东 Mysql开发规范》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql开发规范