规范

  1. 库名、表名、字段名必须使用小写字母, 并采用下划线分割, 禁止超过32个字符(整齐、易读)

  2. 临时库、表名须以tmp加日期为后缀;

  3. 使用Innodb存储引擎.【好处: 支持事务和行级锁】

  4. 字符集统一使用UTF8mb4【most bytes 4《支持Emoji和全部中文】;

  5. 表,字段增加注释,方便后期维护,枚举型标明说明文字.

  6. 控制单表字段数量,建议冷热数据分离,大字段分离,提升IO性能;

  7. 统一常用字段的含义与使用,比如很多表都会出现创建时间、更新时间、删除时间、软删除字段、状态等等,团队内约定好对应的字段、类型、默认值等等。

  8. 不使用视图、外键,而是通过代码多次实现 【视图/外键需要修改地方众多,可读性可迁移性较差】

  9. 单表数据量控制在5000w以内,超出要分库分表;

  10. 字段选择:

    • 字符串: 优先使用varchar,如果长度基本固定的列,如果该列恰好更新又特别频繁,适合char,大文本使用text;
    • 数字: 使用tinyint(1)来代替 enum和boolean
    • 时间: 推荐使用datetime;
      • datetime 和timestamp类型所占的存储空间不同,前者8个字节,后者4个字节,timestamp只能到2038-01-19 11:14:07;
      • timestamp类型随时间不同而不同.
  11. 索引:

    • 个数: 索引个数控制在5个以内, 索引在加快访问速度的同时,会增加维护负担,增大IO压力,索引占用空间是成倍增加的
    • 主键索引: 一般情况下优先考虑UUID,【考虑UUID和自增id的应用场景】
    • 在使用前使用explain看能否命中索引;
    • 组合索引要遵循最左原则: 例如index(‘c1’, ‘c2’, ‘c3’) where ‘c2’ = ‘aaa’ 不使用索引,where c2 = aaa and c3=sss 不能使用索引(如果第一个字段出现 范围符号的查找,那么将不会用到索引,如果是第二个或者第三个字段使用范围符号的查找,那么他会利用索引,利用的索引) https://www.cnblogs.com/chenshishuo/p/5030029.html
    • 索引字段必须使用 NOT NULL + 默认值的形式,其他的不加NOT NULL对于性能提升影响不大;
  12. SQL语句

    • 杜绝直接 SELECT * 读取全部字段,列出要读取的字段;
    • 使用where,limit,offset等字段标明范围,尽量避免全表搜索;
    • 使用like模糊匹配,%尽量不要放首位,会导致搜索失效;

优化

  1. 大数据量获取全部尽量采用并行分批的方案去做;
  2. 分页优化: 尽量使用where条件 + limit 替换 offset + limit,
  3. SQL语句中IN包含的值不应超过200个,如果过多则分批;
  4. 读写分离;
  5. 为搜索字段建索引;
  6. 避免select *, 列出要读取的字段;

扩展

1. (转)学习MySQL优化原理,这一篇就够了!

mysql开发规范(优化)的更多相关文章

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

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

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

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

  3. 深入理解MySQL开发性能优化.pptx

    深入理解MySQL开发性能优化.pptx,依旧上传baidu pan http://pan.baidu.com/s/1jIwGslS,视频暂未出,培训完成后会更新.

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

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

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

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

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

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

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

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

  8. 根据多年经验整理的《互联网MySQL开发规范》

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

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

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

随机推荐

  1. Hibernate JPA 动态criteria语句针对null查询条件的特殊处理

    最近原Hibernate项目需要添加一个条件,结构有点类似下面的格式,学生和房间是多对一的关系,现在要查询所有没有房间的学生. Class Student{ @ManyToOne Room room; ...

  2. RocketMQ源码 — 八、 RocketMQ消息重试

    RocketMQ的消息重试包含了producer发送消息的重试和consumer消息消费的重试. producer发送消息重试 producer在发送消息的时候如果发送失败了,RocketMQ会自动重 ...

  3. NSURLSession 所有的都在这里(一)

    这篇文章会有什么? 在这篇文章中把NSURLSession.h文件集体梳理一遍,把里面的每个属性.代理和方法都拿出来说说,通过这篇文章我相信对于NSURLSession这一块的东西会梳理的比较全面一点 ...

  4. 将Excel表中的数据导入到数据库

    网上查到的有参考价值的就一家,自己调试发现可行.感谢原创文章:将Excel中数据导入数据库(一) using System; using System.Collections.Generic; usi ...

  5. 读《图解HTTP》有感-(确保WEB安全的HTTPS)

    写在前面 该章节分析当前使用的HTTP协议中存在的安全性问题,以及采用HTTPS协议来规避这些可能存在的缺陷 正文 1.HTTP的缺点 1.1.由于HTTP不具备加密功能,所以在通信链路上,报文是以明 ...

  6. SpringMVC, Spring和Mybatis整合案例一

    一  准备工作 包括:spring(包括springmvc).mybatis.mybatis-spring整合包.数据库驱动.第三方连接池. 二  整合思路 Dao层: 1.SqlMapConfig. ...

  7. mysql 从一个表中查数据,插入另一个表

    其实很简单,只是为了忘记,做个记录,用的时候方便. 不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指 ...

  8. ARM-Linux中断系统

    1.前言 了解Linux中断子系统,同时也需要了解ARM体系结构中断处理流程:在熟悉整个软硬件架构和流程基础上,才能对流程进行细化,然后找出问题的瓶颈.<2. 梳理中断处理子系统> 但是所 ...

  9. Linux时间子系统之(三):用户空间接口函数

    专题文档汇总目录 Notes:用户空间时间相关接口函数: 类型 API 精度 说明 时间 time stime time_t 精度为秒级 逐渐要被淘汰.需要定义__ARCH_WANT_SYS_TIME ...

  10. 你不知道的JavaScript--Item18 JScript的Bug与内存管理

    1.JScript的Bug IE的ECMAScript实现JScript严重混淆了命名函数表达式,搞得现很多人都出来反对命名函数表达式,而且即便是现在还一直在用的一版(IE8中使用的5.8版)仍然存在 ...