mysql开发规范

命名规范

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

基础规范

  • 使用INNODB存储引擎
  • 表字符集使用utf8mb4
  • 所有表都需要添加注释
  • 单表数据量建议控制在5000W以内
  • 不在数据库中存储图片、文件等大数据
  • 禁止在线上做数据库压力测试
  • 禁止从测试、开发环境直连数据库

库表设计

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

字段设计

  • 尽可能不使用TEXT、BLOB类型
  • DECIMAL代替FLOAT和DOUBLE存储精确浮点数
  • Simple is good
  • 将字符转化为数字
  • 使用TINYINT来代替ENUM类型
  • Generosity can be unwise
  • 存储 “hello”时VARCHAR(5) VS VARCHAR(200)
  • Avoid null if possible
  • 所有字段均定义为NOT NULL ! Smaller is usually better
  • 使用UNSIGNED存储非负整数
  • INT类型固定占用4字节存储
  • 使用timestamp存储时间
  • 使用INT UNSIGNED存储IPV4
  • 使用VARBINARY存储大写敏感的变 字符串
  • 禁用在数据库中存储明文密码

索引规范

索引的用途

  • 去重
  • 加速定位
  • 避免排序
  • 覆盖索引

索引数量控制

  • 单张表中索引数量不超过5个
  • 单个索引中的字段数不超过5个
  • 对字符串使用前缀索引,前缀索引长度不超过8个字符
  • 建议优先考虑前缀索引,必要时可添加伪列并建立索引

主键准则

  • 表必须有主键
  • 不使用更新频繁的列
  • 尽量不选择字符串列
  • 不使用UUID MD5 HASH
  • 默认使用非空的唯一键
  • 建议选择自增或发号器

重要的SQL必须被索引

  • UPDATE、DELETE语句的WHERE条件列
  • ORDER BY、GROUP BY、DISTINCT的字段
  • 多表JOIN的字段

区分度最大的字段放在前

核心SQL优先考虑覆盖索引

避免冗余和重复索引

索引不是越多越好

  • 综合评估数据密度和分布
  • 考虑查询和更新比例

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java达人

sql 中 join 的复杂示例解读

inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 r...

20480
来自专栏java学习

数据库介绍以及使用

第1章 数据库介绍 1.1 数据库概述 l 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以...

37040
来自专栏吴伟祥

Navicat Premium 技巧介绍 + MySQL性能分析

注:数据库里的数据顺序是按照创建时间存储并排序的,对应List的元素索引从小到大,即索引值越大,这条数据的创建时间越晚,与数据库里的顺序是对应的。 (默认...

47720
来自专栏乐沙弥的世界

MongoDB 复合索引

如下图所示,在集合的userid以及score列上创建一个复合索引,其中userid为升序,score为降序

12810
来自专栏horstxu的博客

MYSQL中的COLLATE是什么?

这个值后面对应的utf8_unicode_ci是什么意思呢?面试的时候用这个题目考一考DBA,应该可以难倒一大部分人。

858180
来自专栏技术碎碎念

sql server 2008 数据库的完整性约束

一、数据库完整性概述 1.数据库的完整性: ①数据库的完整性是指数据的正确性和相容性 ②数据库完整性是防止不合语义或不正确的数据进入数据库 ③完整性体现了是否真...

35040
来自专栏各种机器学习基础算法

常用但容易忘记的sql语句(sql server为主)

1.说明:随机取出10条数据 a.Sql Server: select top 10 * from tablename order by newid() b....

30690
来自专栏从流域到海域

SQL连接查询(最全面)

连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。 在关系数据库管理系统中,表建立时各数据之间...

28170
来自专栏10km的专栏

mysql/jdbc:设置useInformationSchema=true读取表注释信息(table_comment)

问题描述 今天在读取表的注释信息(COMMENT)时,发现返回的REMARKS字段返回居然是null. 以下是代码示例: DatabaseMetaData...

29770
来自专栏张善友的专栏

Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft ...

35480

扫码关注云+社区

领取腾讯云代金券