一、基础规范

  • 使用 INNODB 存储引擎
  • 表字符集使用 UTF8 
  • 所有表都需要添加注释
  • 单表数据量建议控制在 5000W 以内
  • 不在数据库中存储图⽚、文件等大数据
  • 禁止在线上做数据库压力测试
  • 禁⽌从测试、开发环境直连数据库

二、命名规范

  • 库名表名字段名必须有固定的命名长度,12个字符以内
  • 库名、表名、字段名禁⽌止超过32个字符。须见名之意
  • 库名、表名、字段名禁⽌止使⽤用MySQL保留字
  • 临时库、表名必须以tmp为前缀,并以⽇日期为后缀
  • 备份库、表必须以bak为前缀,并以日期为后缀

三、库、表、字段开发设计规范

  • 禁⽌使用分区表
  • 拆分大字段和访问频率低的字段,分离冷热数据
  • 用HASH进行散表,表名后缀使用十进制数,下标从   开始
  • 按日期时间分表需符合 YYYY[MM][DD][HH] 格式
  • 采用合适的分库分表策略。例如千库十表、十库百表等
  • 尽可能不使用 TEXT 、 BLOB 类型
  • 用 DECIMAL 代替 FLOAT 和 DOUBLE 存储精确浮点数
  • 越简单越好:将字符转化为数字、使用 TINYINT 来代替 ENUM 类型
  • 所有字段均定义为 NOT NULL
  • 使用 UNSIGNED 存储非负整数
  • INT类型固定占用   字节存储
  • 使用 timestamp 存储时间
  • 使用 INT UNSIGNED 存储 IPV4
  • 使用 VARBINARY 存储大小写敏感的变长字符串
  • 禁止在数据库中存储明文密码,把密码加密后存储
  • 用好数值类型字段
  • 存储ip最好用 int 存储而非 char()
  • 不允许使用 ENUM
  • 避免使用 NULL 字段, NULL 字段很难查询优化,NULL字段的索引需要额外空间,NULL字段的复合索引无效
  • 少用 text/blob , varchar 的性能会比 text 高很多,实在避免不了blob,请拆表
  • 数据库中不允许存储大文件,或者照片,可以将大对象放到磁盘上,数据库中存储它的路径

四、索引规范

1、索引的数量要控制:

  • 单张表中索引数量不超过5个
  • 单个索引中的字段数不超过5个
  • 对字符串使⽤用前缀索引,前缀索引长度不超过8个字符
  • 建议优先考虑前缀索引,必要时可添加伪列并建立索引

2、主键准则

  • 表必须有主键
  • 不使用更新频繁的列作为主键
  • 尽量不选择字符串列作为主键
  • 不使用 UUID   MD5   HASH 这些作为主键(数值太离散了)
  • 默认使⽤非空的唯一键作为主键
  • 建议选择自增或发号器

3、重要的SQL必须被索引,比如:

  • UPDATE 、 DELETE 语句的 WHERE 条件列
  • ORDER BY 、 GROUPBY 、 DISTINCT 的字段

4、多表JOIN的字段注意以下

  • 区分度最大的字段放在前面
  • 核⼼SQL优先考虑覆盖索引
  • 避免冗余和重复索引
  • 索引要综合评估数据密度和分布以及考虑查询和更新比例

5、索引禁忌

  • 不在低基数列上建立索引,例如“性别”
  • 不在索引列进行数学运算和函数运算

6、尽量不使用外键

  • 外键用来保护参照完整性,可在业务端实现
  • 对父表和子表的操作会相互影响,降低可用性

7、索引命名:非唯一索引必须以idx字段1字段2命名,唯一所以必须以 uniq 字段 1 字段 2 命名,索引名称必须全部小写

8、新建的唯一索引必须不能和主键重复

9、索引字段的默认值不能为 NULL ,要改为其他的 default 或者空。 NULL 非常影响索引的查询效率

10、反复查看与表相关的SQL,符合最左前缀的特点建立索引。多条字段重复的语句,要修改语句条件字段的顺序,为其建立一条联合索引,减少索引数量

11、能使用唯一索引就要使用唯一索引,提高查询效率

12、研发要经常使用 explain ,如果发现索引选择性差,必须让他们学会使用hint

五、SQL规范

  • SQL语句尽可能简单,大的SQL想办法拆成小的SQL语句(充分利用QUERYCACHE和充分利用多核CPU)
  • 事务要简单,整个事务的时间长度不要太长
  • 避免使用触发器、函数、存储过程
  • 降低业务耦合度,为s acle out 、 sharding 留有余地
  • 避免在数据库中进⾏数学运算(MySQL不擅长数学运算和逻辑判断)
  • 不要用 SELECT * ,查询哪几个字段就SELECT这几个字段
  • SQL中使用到OR的改写为用IN()(OR的效率没有IN的效率高)
  • in里面数字的个数建议控制在  以内
  • LIMIT分页注意效率。LIMIT越大,效率越低。可以改写 LIMIT ,比如例子改写:

    SELECT id FROM t LIMIT , ; => SELECT id FROM t WHERE id >  LIMIT ;
  • 使用 UNION ALL 替代  UNION

  • 避免使用大表的 JOIN
  • 使用 GROUP BY 分组、自动排序
  • 对数据的更新要打散后批量更新,不要一次更新太多数据
  • 减少与数据库的交互次数
  • 注意使用性能分析工具

    SQL explain / showprofile / mySQLsla

  • SQL语句要求所有研发,SQL关键字全部是大写,每个词只允许有一个空格

  • SQL语句不可以出现隐式转换,比如 SELECT id FROM TABLE WHERE id=''
  • IN条件里面的数据数量要少,我记得应该是500个以内,要学会使用EXIST代替IN,EXIST在一些场景查询会比IN快
  • 能不用 NOT IN 就不用 NOTIN ,坑太多了。。会把空和NULL给查出来
  • 在SQL语句中,禁止使用前缀是%LIKE
  • 不使用负向查询,如 NOT IN /  LIKE
  • 关于分页查询:程序里建议合理使用分页来提高效率LIMITOFFSET较大要配合子查询使用
  • 禁止在数据库中跑大查询
  • 使⽤预编译语句,只传参数,比传递SQL语句更高效;一次解析,多次使用;降低SQL注入概率
  • 禁止使 ORDER BY RAND()
  • 禁⽌单条SQL语句同时更新多个表

六、流程规范

  • 所有的建表操作需要提前告知该表涉及的查询SQL;
  • 所有的建表需要确定建立哪些索引后才可以建表上线;
  • 所有的改表结构、加索引操作都需要将涉及到所改表的查询SQL发出来告知DBA等相关人员;
  • 在建新表加字段之前,要求研发至少要提前3天邮件出来,给DBA们评估、优化和审核的时间
  • 批量导入、导出数据必须提前通知DBA协助观察
  • 禁止在线上从库执行后台管理和统计类查询
  • 禁止有超级权限的应用程序账号存在
  • 推广活动或上线新功能必须提前通知DBA进⾏行流量评估
  • 不在业务高峰期批量更新、查询数据库

原文 -- >  戳我

转自 -- >  戳我

根据多年经验整理的《互联网MySQL开发规范》的更多相关文章

  1. [转载] 根据多年经验整理的《互联网MySQL开发规范》

    原文: http://weibo.com/p/2304181380b3f180102vsg5 根据多年经验整理的<互联网MySQL开发规范> 写在前面:无规矩不成方圆.对于刚加入互联网的朋 ...

  2. 《互联网MySQL开发规范》

    一.基础规范 使用 INNODB 存储引擎 表字符集使用 UTF8  所有表都需要添加注释 单表数据量建议控制在 5000W 以内 不在数据库中存储图⽚.文件等大数据 禁止在线上做数据库压力测试 禁⽌ ...

  3. 从MySQL开发规范处看创业

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/n88Lpo/article/details/78099185 作者:唐勇.深圳市环球易购.MySQL ...

  4. [转发] 老叶观点:MySQL开发规范之我见

    原文: http://imysql.com/2015/07/23/something-important-about-mysql-design-reference.shtml 老叶观点:MySQL开发 ...

  5. 建议收藏 - 专业的MySQL开发规范

    为了项目的稳定,代码的高效,管理的便捷,在开发团队内部会制定各种各样的规范 这里分享一份我们定义的MySQL开发规范,欢迎交流拍砖 数据库对象命名规范 数据库对象 命名规范的对象是指数据库SCHEMA ...

  6. 一文总结高并发大数据量下MySQL开发规范【军规】

    在互联网公司中,MySQL是使用最多的数据库,那么在并发量大.数据量大的互联网业务中,如果高效的使用MySQL才能保证服务的稳定呢?根据本人多年运维管理经验的总结,梳理了一些核心的开发规范,希望能给大 ...

  7. 一份完整的 MySQL 开发规范,进大厂必看!

    作者:听风 https://www.cnblogs.com/huchong/p/10219318.html 一.数据库命令规范 1.所有数据库对象名称必须使用小写字母并用下划线分割 2.所有数据库对象 ...

  8. 精心整理16条MySQL使用规范,减少80%问题,推荐分享给团队

    上篇文章介绍了如何创建合适的MySQL索引,今天再一块学一下如何更规范.更合理的使用MySQL? 合理规范的使用MySQL,可以大大减少开发工作量和线上问题,并提升SQL查询性能. 我精心总结了这16 ...

  9. 老叶观点:MySQL开发规范之我见

    来源:http://ourmysql.com/archives/1396 大多数MySQL规范在网上也都能找得到相关的分享,在这里要分享的是老叶个人认为比较重要的,或者容易被忽视的,以及容易被混淆的一 ...

随机推荐

  1. [转载] Windows + IIS + PHP 配置

    资源下载: 下载windwos版本的PHP:http://windows.php.net/download/ (我下载的是PHP5.4.9_VC9 x86 Non Thread Safe,下载地址:h ...

  2. 成功熬了四年还没死?一个IT屌丝创业者的深刻反思

    三个IT屌丝创业的故事 从前有三个屌丝,聚在一起做网络.提供免费的网络服务,砸锅卖铁,通宵达旦,除了卖肾,啥都做了.3年后终于做到了五百万用户.对于年轻人来说,能把五百万人玩弄于鼓掌之间,已经是很牛逼 ...

  3. linux查看ssh用户登录日志与操作日志

    linux查看ssh用户登录日志与操作日志 2013-11-01转载   ssh用户登录日志 linux下登录日志在下面的目录里:  代码如下 复制代码 cd /var/log 查看ssh用户的登录日 ...

  4. MVC+EF OA观看视频记录

    搭建基本框架 创建基接口: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  5. win7 安装 memcached

    1. 下载 memcached-win32-1.4.4-14.zip,里面包含6个文件,将解压后的文件夹随便放在什么位置.如果需要win64版,下载 memcached-win64-1.4.4-14. ...

  6. 20145320《Java程序设计》第三次实验报告

    20145320<Java程序设计>第三次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.22 15: ...

  7. SQL数据库操作命令大全

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...

  8. Leetcode: Reconstruct Original Digits from English

    Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...

  9. 如何写出优雅的Python之设置class缺省值

    今天有个需求时需要为某个类设置缺省值 最开始的代码如下: Class myClass def __init__(self,datalen=None,times=None): if datalen == ...

  10. Console API 与命令行

    一.Console API 当打开 firebug (也包括 Chrome 等浏览器的自带调试工具),window 下面会注册一个叫做 console 的对象,它提供多种方法向控制台输出信息,供开发人 ...