mysql开发规范(优化)
规范
库名、表名、字段名必须使用小写字母, 并采用下划线分割, 禁止超过32个字符(整齐、易读)
临时库、表名须以tmp加日期为后缀;
使用Innodb存储引擎.【好处: 支持事务和行级锁】
字符集统一使用UTF8mb4【most bytes 4《支持Emoji和全部中文】;
表,字段增加注释,方便后期维护,枚举型标明说明文字.
控制单表字段数量,建议冷热数据分离,大字段分离,提升IO性能;
统一常用字段的含义与使用,比如很多表都会出现创建时间、更新时间、删除时间、软删除字段、状态等等,团队内约定好对应的字段、类型、默认值等等。
不使用视图、外键,而是通过代码多次实现 【视图/外键需要修改地方众多,可读性可迁移性较差】
单表数据量控制在5000w以内,超出要分库分表;
字段选择:
- 字符串: 优先使用varchar,如果长度基本固定的列,如果该列恰好更新又特别频繁,适合char,大文本使用text;
- 数字: 使用tinyint(1)来代替 enum和boolean
- 时间: 推荐使用datetime;
- datetime 和timestamp类型所占的存储空间不同,前者8个字节,后者4个字节,timestamp只能到2038-01-19 11:14:07;
- timestamp类型随时间不同而不同.
索引:
- 个数: 索引个数控制在
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对于性能提升影响不大;
SQL语句
- 杜绝直接 SELECT * 读取全部字段,列出要读取的字段;
- 使用where,limit,offset等字段标明范围,尽量避免全表搜索;
- 使用like模糊匹配,%尽量不要放首位,会导致搜索失效;
库名、表名、字段名必须使用小写字母, 并采用下划线分割, 禁止超过32个字符(整齐、易读)
临时库、表名须以tmp加日期为后缀;
使用Innodb存储引擎.【好处: 支持事务和行级锁】
字符集统一使用UTF8mb4【most bytes 4《支持Emoji和全部中文】;
表,字段增加注释,方便后期维护,枚举型标明说明文字.
控制单表字段数量,建议冷热数据分离,大字段分离,提升IO性能;
统一常用字段的含义与使用,比如很多表都会出现创建时间、更新时间、删除时间、软删除字段、状态等等,团队内约定好对应的字段、类型、默认值等等。
不使用视图、外键,而是通过代码多次实现 【视图/外键需要修改地方众多,可读性可迁移性较差】
单表数据量控制在5000w以内,超出要分库分表;
字段选择:
- 字符串: 优先使用varchar,如果长度基本固定的列,如果该列恰好更新又特别频繁,适合char,大文本使用text;
- 数字: 使用tinyint(1)来代替 enum和boolean
- 时间: 推荐使用datetime;
- datetime 和timestamp类型所占的存储空间不同,前者8个字节,后者4个字节,timestamp只能到2038-01-19 11:14:07;
- timestamp类型随时间不同而不同.
索引:
- 个数: 索引个数控制在
5个以内, 索引在加快访问速度的同时,会增加维护负担,增大IO压力,索引占用空间是成倍增加的 - 主键索引: 一般情况下优先考虑UUID,【考虑UUID和自增id的应用场景】
- 在使用前使用
explain看能否命中索引; - 组合索引要遵循最左原则: 例如index(‘c1’, ‘c2’, ‘c3’) where ‘c2’ = ‘aaa’ 不使用索引,where
c2=aaaandc3=sss不能使用索引(如果第一个字段出现 范围符号的查找,那么将不会用到索引,如果是第二个或者第三个字段使用范围符号的查找,那么他会利用索引,利用的索引) https://www.cnblogs.com/chenshishuo/p/5030029.html - 索引字段必须使用 NOT NULL + 默认值的形式,其他的不加NOT NULL对于性能提升影响不大;
- 个数: 索引个数控制在
SQL语句
- 杜绝直接 SELECT * 读取全部字段,列出要读取的字段;
- 使用where,limit,offset等字段标明范围,尽量避免全表搜索;
- 使用like模糊匹配,%尽量不要放首位,会导致搜索失效;
优化
- 大数据量获取全部尽量采用并行分批的方案去做;
- 分页优化: 尽量使用where条件 + limit 替换 offset + limit,
- SQL语句中IN包含的值不应超过200个,如果过多则分批;
- 读写分离;
- 为搜索字段建索引;
- 避免select *, 列出要读取的字段;
扩展
mysql开发规范(优化)的更多相关文章
- [转载] 根据多年经验整理的《互联网MySQL开发规范》
原文: http://weibo.com/p/2304181380b3f180102vsg5 根据多年经验整理的<互联网MySQL开发规范> 写在前面:无规矩不成方圆.对于刚加入互联网的朋 ...
- [转发] 老叶观点:MySQL开发规范之我见
原文: http://imysql.com/2015/07/23/something-important-about-mysql-design-reference.shtml 老叶观点:MySQL开发 ...
- 深入理解MySQL开发性能优化.pptx
深入理解MySQL开发性能优化.pptx,依旧上传baidu pan http://pan.baidu.com/s/1jIwGslS,视频暂未出,培训完成后会更新.
- 从MySQL开发规范处看创业
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/n88Lpo/article/details/78099185 作者:唐勇.深圳市环球易购.MySQL ...
- 建议收藏 - 专业的MySQL开发规范
为了项目的稳定,代码的高效,管理的便捷,在开发团队内部会制定各种各样的规范 这里分享一份我们定义的MySQL开发规范,欢迎交流拍砖 数据库对象命名规范 数据库对象 命名规范的对象是指数据库SCHEMA ...
- 一份完整的 MySQL 开发规范,进大厂必看!
作者:听风 https://www.cnblogs.com/huchong/p/10219318.html 一.数据库命令规范 1.所有数据库对象名称必须使用小写字母并用下划线分割 2.所有数据库对象 ...
- 一文总结高并发大数据量下MySQL开发规范【军规】
在互联网公司中,MySQL是使用最多的数据库,那么在并发量大.数据量大的互联网业务中,如果高效的使用MySQL才能保证服务的稳定呢?根据本人多年运维管理经验的总结,梳理了一些核心的开发规范,希望能给大 ...
- 根据多年经验整理的《互联网MySQL开发规范》
一.基础规范 使用 INNODB 存储引擎 表字符集使用 UTF8 所有表都需要添加注释 单表数据量建议控制在 5000W 以内 不在数据库中存储图⽚.文件等大数据 禁止在线上做数据库压力测试 禁⽌ ...
- 《互联网MySQL开发规范》
一.基础规范 使用 INNODB 存储引擎 表字符集使用 UTF8 所有表都需要添加注释 单表数据量建议控制在 5000W 以内 不在数据库中存储图⽚.文件等大数据 禁止在线上做数据库压力测试 禁⽌ ...
随机推荐
- MySQL-数据检索
MySQL简介 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅 ...
- C#备份及还原数据库的实现
使用前要导入SQLDMO.dll 下载地址:http://down.51cto.com/data/853937 1.在用户的配置时,我们需要列出当前局域网内所有的数据库服务器,并且要列出指定服务器的所 ...
- 使用MongoDB存储集合的一些问题
这两天在工作中被Mongo集合存储给整得头大,当然也是我的认知太浅,所以下面我来分享下我所遇到的这个问题希望有大佬能给出更好的解决方案, 1.需求: 存储一个从前端接收未知数据类型的集合 例: 由于是 ...
- 阿里Java架构师谈谈架构和如何成为一个Java架构师
架构的定义 我们来看看软件架构的一般定义: 程序和计算系统软件体系结构是指系统的一个或多个结构. 该结构包括软件的构建,构建的外部可见属性以及它们之间的相互关系. 该体系结构不是可操作的软件. 具体来 ...
- Lucene入门案例一
1. 配置开发环境 官方网站:http://lucene.apache.org/ Jdk要求:1.7以上 创建索引库必须的jar包(lucene-core-4.10.3.jar,lucene-anal ...
- dup和dup2应用实例(dup跟APUE有出入,close+dup=dup2?)
dup/dup2函数 有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接. dup()与dup2()能对输入文件描述符进行重定向. 函数原型如下: dup函数创建一个新的文件描 ...
- S3C6410板子移植 Android2.2
一:Android简介 1.什么是Android: Android是一种基于linux的自由及开放源代码的操作系统,主要适用于移动设备,如智能手机和平板电脑,是由google公司和开放手机联盟领导和开 ...
- PHP之cookies小练习
//5-1.php 1 <? error_reporting(E_ALL ^ E_NOTICE); if ($_COOKIE['username']!="") { echo ...
- SSM-SpringMVC-20:SpringMVC中处理器方法之返回值void篇
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 处理器的方法我们之前做过,返回值为String的,返回值为ModelAndView的,我们这个讲的这个返回 ...
- 斐波那契数列第n项的值及前n项之和
<script>// 算法题 // 题1:斐波那契数列:1.1.2.3.5.8.13.21...// // 一.斐波那契数列第n项的值 // // 方法一//递归的写法function a ...