1.库命名规则:dbname_suffix,分为_dev/_test/_pre/_mertest/_perf/_prod六个环境

2.适度反范式设计,冗余表字段数据减少JOIN关联提高访问效率

3.普通索引命名:idx_字段名,联合索引命名:idx_字段名1_字段名2…,唯一索引命名:uq_字段名

4.表和字段必须加上(中文)注释

5.存储时间类型datetime/timestamp/date等,不使用char/varchar。【建议】建议当时间范围小于2037年使用TIMESTAMP类型,因为 TIMESTAMP占用空间更小

6.关键业务数据表,增加create_time和update_time字段,使用current_timestamp()函数定义默认值,方便后期数据分析和问题追溯

示例:

create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

update_time timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'

7.存储精确浮点数必须使用 DECIMAL 替代 FLOAT 和 DOUBLE

8.所有字段均显示定义为NOT NULL,不使用 DEFAULT NULL 并指定DEFAULT值

×   aaa varchar(32) DEFAULT NULL

√   aaa varchar(32) NOT NULL  DEFAULT ''

√   bbb int   NOT NULL  DEFAULT -1

9.char ,Varchar 长度适当,可预见范围内尽量小

说明:varhcar(10) 中的数字不是字节而是字符,那么此处能存下10个汉字或字母。**

   ×   `aaa` varchar(2000) NOT NULL  DEFAULT ''

10.单表字段数量控制在50个以内,尽可能不使用TEXT、BLOB 类型,将过大字段拆分到其他表中

11.支持创建新表和添加新字段,禁止drop和rename表名和字段名(支持应用上灰度发布)

12.UPDATE、DELETE 语句需要根据 WHERE 条件添加索引

13.对长度过长的 VARCHAR 字段建立索引时, 添加 crc32 或者 MD5 Hash 字段, 对 Hash 字段建立索引

14.禁止在更新频繁、区分度不高的字段上建立索引

15.JOIN字段要创建索引

16.单个索引字段数不超过5,最好使用唯一性好的索引,单表索引数量不超过5

17.ORDER BY,GROUP BY,DISTINCT 的字段需要添加在索引的后面,否则会很消耗io、cpu计算资源

18.SELECT 语句只输出需要的字段,禁止SELECT *

19.SELECT、INSERT 语句必须显式的指明字段名称,不使用 SELECT *,不使用 INSERT INTO table()

20.写密集场景INSERT 语句使用 batch 提交(INSERT INTO table VALUES(),(),()……) ,values 的个数不应过多,控制在1000个以内

21.避免大表与大表之间的JOIN,考虑让小表去驱动大表JOIN

22.关于分页优化,两种分页查询的正确姿势:

SELECT * FROM table WHERE TIME<last_TIME ORDER BY TIME DESC LIMIT 10

SELECT * FROM table inner JOIN(SELECT id FROM table ORDER BY TIME LIMIT 10000,10) as t USING(id)

23.WHERE语句中使用IN代替OR ,但IN的值不超过1000,或改写成JOIN性能会更好

24.WHERE 条件中的非等值条件(IN、BETWEEN、<、<=、>、>=)会导致后面的条件使用不了索引

25.WHERE 条件中字段禁止运算禁止使用函数`× where id + 1 = 100

√ where id  = 100 -1

× where unix_timestamp('time') = 1366169490

√ where time = FROM_UNIXTIME(1366169490) `

26.WHERE中禁止使用%前缀模糊查询,例如 LIKE “%abc”,会导致全表扫描

MySQL开发设计规范的更多相关文章

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

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

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

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

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

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

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

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

  5. Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试

    Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试一.下载相关安装包 1.下载nginx最新版本(nginx1.3.13版之后才支持websocket协议) 下载地址 ...

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

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

  7. 【MySql】赶集网mysql开发36条军规

    [MySql]赶集网mysql开发36条军规 2012-05-14 14:02:33 分类: Linux   写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒 ...

  8. mysql开发中使用存储过程

    在mysql开发中使用存储过程的理由: 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的 mysql 执行语句是要先编译,然后再执行的.这样如果查询并发大的时候. ...

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

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

随机推荐

  1. 通过阿里云ECS服务器公网ip访问tomcat,nginx

    一.概述 1.操作系统:centos7 2.安装nginx方法:https://www.cnblogs.com/boonya/p/7907999.html,亲测可用. 3.tomcat版本:apach ...

  2. Python的迭代器和生成器

    列表生成式 列表生成式可以快速创建list. >>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] ...

  3. C#实现多个PDF合并及去除文字水印功能

    实现pdf合并就是使用Spire.Pdf.dll类库的方法,但是注意需要同时引用Spire.Pdf.dll和Spire.License.dll两个类库,且两个类库的版本要一致 String[] fil ...

  4. IntelliJ IDEA 关闭多余项目

    在开发中 一个项目中可能会有多个子项目,切换起来比较麻烦,需要将用不到的项目关掉 1.就是关闭一个Project中多个module的一个 2.右击要关闭项目,选中弹出窗口中的 Load/Unload ...

  5. jersey 开启gzip

    @Bean public ResourceConfig resourceConfig() { ResourceConfig resourceConfig = new ResourceConfig(); ...

  6. C#winform窗口登录和数据的增删改查

    工具:VS2013 数据库SqlServer2008 两张表,一个用户登录表,一个资料表用于增删改查 .先把表建好.可以根据我发的图建立,这样下面的代码修改的就少. 资料部分SQL CREATE TA ...

  7. hadoop的环境变量

    # hadoop && yarn export HADOOP_PREFIX=/home/ochadoop/apps/hadoop export HADOOP_HOME=${HADOOP ...

  8. 18Linux-LNMP-Linux就该这么学

    LNMP 编译环境包: [root@linuxprobe ~]# yum install -y apr* autoconf automake bison bzip2 bzip2* compat* cp ...

  9. Webpack 使用url-loader和file-loader打包资源文件

    在js中不仅可以通过import引入js文件,还可以引入图片.视频等资源文件,这样webpack打包时就会把所引入的资源文件也一起打包进来 打包进来的文件会返回一个字符串:即文件的路径 要做到这一点, ...

  10. log4net的简单使用记录一下,防止下次忘记

    1.在程序的assembly.cs下添加: [assembly: log4net.Config.XmlConfigurator(Watch = true)]  (忘记这一步,弄了半天,上次好像也是这样 ...