HardBirch

MySQL 军规升级

时间:18-03-31 栏目:性能优化 作者:魔豆先生 评论:0 点击: 801 次

一、基础规范

  • 表存储引擎必须使用 InnoDB
  • 表字符集默认使用 utf8 ,必要时候使用 utf8mb4

解读:

( 1 )通用,无乱码风险,汉字 3 字节,英文 1 字节

( 2 ) utf8mb4 是 utf8 的超集,有存储 4 字节例如表情符号时,使用它

  • 禁止使用存储过程,视图,触发器, Event

解读:

( 1 )对数据库性能影响较大,互联网业务,能让站点层和服务层干的事情,不要交到数据库层

( 2 )调试,排错,迁移都比较困难,扩展性较差

  • 禁止在数据库中存储大文件,例如照片,可以将大文件存储在对象存储系统,数据库中存储路径
  • 禁止在线上环境做数据库压力测试
  • 测试,开发,线上数据库环境必须隔离

二、命名规范

  • 库名,表名,列名必须用小写,采用下划线分隔

解读: abc , Abc , ABC 都是给自己埋坑

  • 库名,表名,列名必须见名知义,长度不要超过 32 字符

解读: tmp , wushan 谁TM知道这些库是干嘛的

  • 库备份必须以 bak 为前缀,以日期为后缀
  • 从库必须以 -s 为后缀
  • 备库必须以 -ss 为后缀

三、表设计规范

  • 单实例表个数必须控制在 2000 个以内
  • 单表分表个数必须控制在 1024 个以内
  • 表必须有主键,推荐使用 UNSIGNED 整数为主键

潜在坑:删除无主键的表,如果是 row 模式的主从架构,从库会挂住

  • 禁止使用外键,如果要保证完整性,应由应用程式实现

解读:外键使得表之间相互耦合,影响 update/delete 等 SQL 性能,有可能造成死锁,高并发情况下容易成为数据库瓶颈

  • 建议将大字段,访问频度低的字段拆分到单独的表中存储,分离冷热数据

解读:具体参加《 如何实施数据库垂直拆分 》

四、列设计规范