博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql开发规范
阅读量:6005 次
发布时间:2019-06-20

本文共 1491 字,大约阅读时间需要 4 分钟。

hot3.png

[TOC]

#Mysql开发规范

##命名规范

  • 库名、表名、字段名必须使用小写字母,并采用下划线分割
  • 库名、表名、字段名禁止超过32字字符。须见名之意
  • 库名、表名、字段名禁止使用Mysql保留字
  • 临时库、表名必须以tmp为前缀,并以日期为后缀
  • 备份库、表名必须以bak为前缀,并以日期为后缀
create table user ...tmp_user_20160606bak_user_20160606

##基础规范

  • 使用innodb存储引擎
  • 表字符集使用utf-8
  • 所有表必须添加注释
  • 单表数据量控制在5000w以内
  • 不在数据库中存储图片、文件等大数据
  • 禁止在线上做数据库压力测试

##库表设计

  • 禁止使用分区表
  • 拆分大字段和访问频率低的字段,分离冷热数据
  • 用hash进行散表,表名后缀使用十进制数,下标从0开始
  • 按日期时间分表需符合YYYY[MM][DD][HH]格式
  • 采用合适的分库分表策略。例如十库百表等

##字段设计

  • 所有字段均定义为not null
  • 尽量不使用TEXT、BLOB类型
  • 使用decimal代替float和double存储精确浮点数
  • 使用tinyint代替enum类型
  • 使用unsigned存储非负整数
  • 使用timestamp存储时间
  • 使用int存储时间戳
  • 使用int存储ip
  • 禁止在数据库存储明文密码

##索引规范

  • 单张表索引数量不超过5个
  • 单个索引中的字段数不超过5个
  • 前缀索引长度不超过8个字符
  • 区分度最大的字段放在前面。如:联合索引
  • 尽量不选择字符串列
  • 不使用外键
  • 不使用更新频繁的列
  • 不使用UUID MD5 HASH
  • 不使用%前导的查询,如like "%ab"
  • 不使用负向查询,如not in/like
  • 不在低基数列上建立索引,例如:性别
  • 不在索引列进行数学运算和函数运算

##SQL设计

  • 充分利用前缀索引,例如:最左前缀
  • 不使用select *
  • 不能同时用到两个范围条件
  • 不使用存储过程、触发器、视图等
  • 不使用大表join
  • 不使用数学运算和逻辑判断
  • 不使用order by rand()
  • 不使用单条sql语句同时更新多个表
  • 多使用insert ... on duplicate key update
  • 多使用replace into、insert ignore、insert into values(),(),()
  • 多使用update ... where id in(10,20,50,...)
  • 使用in代替or, in的值不超过1000个
  • 使用explain诊断,避免生成临时表
  • 使用union all而不是union
###goodselect * from profiles where sex='M' order by rating limit 10;select * from profiles inner join (select 
from profiles where x.sex='M'order by rating limit 100000,10) as x using (
);###badselect * from profiles where sex='M' order by rating limit 100000,10;

##行为规范

  • 禁止有super权限的应用程序账号存在
  • 不在业务高峰其期批量更新、查询数据库
  • 提交线上建表改表需求,必须详细注明所有相关sql语句

转载于:https://my.oschina.net/richardx/blog/697903

你可能感兴趣的文章
端口基础常识大全+常用端口对照
查看>>
kettle界面语言修改成中文后,重启报错
查看>>
nagios安装完后插件里没有check_mysql的解决方法
查看>>
梦想的脚步---C语言的学习与成长
查看>>
ubuntu 16.04 安装 Git SVN 图形化客户端 RabbitVCS
查看>>
谷歌Chrome开展实验,解决HTTPS混合内容错误
查看>>
全球.COM域名注册量统计:2月增超29万域名
查看>>
11月微博博客日均覆盖数TOP10:网易博客升至第七
查看>>
6月28日全球域名注册商(国际域名)保有量及市场份额
查看>>
9月第4周全球域名商(国际域名)新增注册量TOP15
查看>>
微软Silverlight 5开发书籍汇总
查看>>
Android热修复升级探索——代码修复冷启动方案
查看>>
我的友情链接
查看>>
如何提高阿里云上应用的可用性(一)
查看>>
如何更高效的管理原生微服务应用
查看>>
浮点数
查看>>
219. Contains Duplicate II - LeetCode
查看>>
MySQL数据库安装及配置相关
查看>>
小U盘大用处
查看>>
今天发现大量TIME_WAIT
查看>>