MySQL开发设计规范
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个汉字或字母。**
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
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开发设计规范的更多相关文章
- 根据多年经验整理的《互联网MySQL开发规范》
一.基础规范 使用 INNODB 存储引擎 表字符集使用 UTF8 所有表都需要添加注释 单表数据量建议控制在 5000W 以内 不在数据库中存储图⽚.文件等大数据 禁止在线上做数据库压力测试 禁⽌ ...
- [转载] 根据多年经验整理的《互联网MySQL开发规范》
原文: http://weibo.com/p/2304181380b3f180102vsg5 根据多年经验整理的<互联网MySQL开发规范> 写在前面:无规矩不成方圆.对于刚加入互联网的朋 ...
- 《互联网MySQL开发规范》
一.基础规范 使用 INNODB 存储引擎 表字符集使用 UTF8 所有表都需要添加注释 单表数据量建议控制在 5000W 以内 不在数据库中存储图⽚.文件等大数据 禁止在线上做数据库压力测试 禁⽌ ...
- 建议收藏 - 专业的MySQL开发规范
为了项目的稳定,代码的高效,管理的便捷,在开发团队内部会制定各种各样的规范 这里分享一份我们定义的MySQL开发规范,欢迎交流拍砖 数据库对象命名规范 数据库对象 命名规范的对象是指数据库SCHEMA ...
- Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试
Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试一.下载相关安装包 1.下载nginx最新版本(nginx1.3.13版之后才支持websocket协议) 下载地址 ...
- 深入理解MySQL开发性能优化.pptx
深入理解MySQL开发性能优化.pptx,依旧上传baidu pan http://pan.baidu.com/s/1jIwGslS,视频暂未出,培训完成后会更新.
- 【MySql】赶集网mysql开发36条军规
[MySql]赶集网mysql开发36条军规 2012-05-14 14:02:33 分类: Linux 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒 ...
- mysql开发中使用存储过程
在mysql开发中使用存储过程的理由: 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的 mysql 执行语句是要先编译,然后再执行的.这样如果查询并发大的时候. ...
- [转发] 老叶观点:MySQL开发规范之我见
原文: http://imysql.com/2015/07/23/something-important-about-mysql-design-reference.shtml 老叶观点:MySQL开发 ...
随机推荐
- java 日志脱敏框架 sensitive-新版本0.0.2-深度拷贝,属性为对象和集合的支持
项目介绍 日志脱敏是常见的安全需求.普通的基于工具类方法的方式,对代码的入侵性太强.编写起来又特别麻烦. 本项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发. 用户也可以基于自己的实际需要, ...
- [python,2018-06-25] 高德纳箭号表示法
概念 高德纳箭号表示法是种用来表示很大的整数的方法,由高德纳于1976年设计.它的意念来自幂是重复的乘法,乘法是重复的加法. 定义 计算 一个箭头 2↑3=2×2×2=8 2↑4=2×2×2×2=16 ...
- java生成简单验证码图片
概要 最近项目需要用java实现输出随机验证码图片到前台,正好有机会接触下java的绘图类,完成需求后也有时间做个总结,写篇随笔记录下也希望能帮助到有同样需求的人! 需求流程图 1.生成随机数 在ja ...
- 2522 和为K的倍数
2522 和为K的倍数 2 秒 262,144 KB 10 分 2 级题 小b喜欢和为K的倍数的序列. 现在有一个长度为n的序列A,请问A有多少个非空连续子序列是小b喜欢的. 收起 输入 第一 ...
- python3下最简单的九九乘法表
def minus(): print("=========================九九乘法表===========================") x=1 y=1 wh ...
- django开发网站 让局域网中的电脑访问你的主机
1. 关闭主机电脑上的防火墙(不用关闭,加一个端口号就行) 2.在你的settings.py文件中,找到ALLOWED_HOSTS=[ ],在中括号中加入你在局域网中的IP.如我在局域网中的IP为19 ...
- 微信授权获取用户openId等信息
在我们开发小程序的时候,需要通过授权获取用户的信息. 第一种使用wx.getUserInfo直接获取微信头像,昵称 // 必须是在用户已经授权的情况下调用 wx.getUserInfo({ succe ...
- [Android]Linux下WebRTC下载与编译
1.硬盘空间: WebRTC官方原话: The checkout size is large due the use of the Chromium build toolchain and many ...
- 这就涉及到ABAQUS历史输出中各能量变量的意义
ABAQUS中,对于很多动态问题,尤其像高速冲击模拟中,对结果评价很重要的一点就是要保证模型能量守恒,这就涉及到ABAQUS历史输出中各能量变量的意义,下面最各简单整理: ALLAE:人工伪应变能,六 ...
- 如何在Python中调用Matlab
检查您的系统是否具有受支持的 Python 版本和 MATLAB R2014b 或更新版本.要检查您的系统上是否已安装 Python,请在操作系统提示符下运行 Python. 1)打开Prompt,输 ...