Mysql开发设计规范

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:   让数据库多做它擅长的事:合理使用字段类型和定义字段长度,做到够用即可,尽量不在数据库做运算,复杂运算请移到程序端处理,尽可能简单应用MySQL。

  让数据库多做它擅长的事:合理使用字段类型和定义字段长度,做到够用即可,尽量不在数据库做运算,复杂运算请移到程序端处理,尽可能简单应用MySQL。

  数据库使用禁忌:

  禁止在生产服务器用线上程序账号手动对线上数据进行变更操作。邮件中禁止群发应用的DB账号和密码。dev环境禁止连接线上数据库。禁止用线上库做任何测试。

  建表规范:

  强制:MySQL字符集utf8mb4,存储引擎采用Innodb。

  强制:每张表的每个字段和表作用需要添加中文注释信息。

  强制:新建表必须为自增无符号数字类型主键列,主键列不应该被修改;

  强制:所有字段默认值不允许设置为NULL,请添加NOT NULL属性。

  强制:定义列名时禁止包含mysql关键字。(保留字列表见官方网站)

  强制:任何数字类型字段如果为非负数,必须指定unsigned修饰符。

  强制:用DECIMAL代替FLOAT和DOUBLE存储精确浮点数。例如与货币、金融相关的数据。

  强制:字段禁止用enum,set,bit数据类型,建议使用TINYINT代替。

  强制:需要为datatime和timestamp类型指定默认值。

  强制:禁止使用存储过程、触发器、视图、自定义函数、外键等。

  强制:禁止使用分区表。

  建议:控制单表数据量 单表不超过2000w,建议不超过500w;

  建议:合理分表:限制单库表数量在300以内,除未来可能的分表除外。

  建议:DB名、表名、字段名,都小写,长度建议不超过15

  建议:控制列数量,字段少而精,字段数量建议在20以内。

  建议:自增列需兼容不连续空洞出现的可能如1,7,15,23。

  建议:字段尽可能不用text/blob类型,换用varchar的性能会比text高很多(避免一次数据指针定位操作)。

  索引规范:

  强制:普通索引命名规则:"idx_"+字段名称或字段名称缩写,唯一索引命名规则"uniq_"+字段名称或字段名称缩写。

  强制:一个表中,最多可包含8个索引。一个索引中,最多可包含5个列

  强制:不允许建重复索引,冗余索引特殊情况下需要给出明确原因。

  强制:禁止使用全文索引

  强制:长字符字段必须建前缀索引。

  强制:页面搜索严禁左模糊(%XXX)或者全模糊(%XXX%),如果需要请走搜索引擎来解决。

  建议:索引并非越多越好(能不加就不加,要加的一定得加);

  SQL操作规范:

  强制:对同一个表的多次ALTER操作必须合并为一次操作,并禁止使用after修饰符,避免数据重排操作增加线上锁表时间。

  强制:禁止在MySQL的WHERE条件左边对字段进行提升数学运算和函数运算。

  强制:数据库尽量避免做运算操作,计算务必移至业务层。

  强制:禁用跨库查询。

  强制:不允许线上程序做DDL操作。

  强制:select 程序代码中不允许有SELECT * ,需要哪些字段必须明确写明。

  强制:select 程序代码中最多一次SELECT不允许超过5万行记录。

  强制:select 程序代码中单次SELECT执行时间不能超过5秒,建议不超过200ms。

  强制:删除(delete),变更(update) 语句必须有where条件。

  强制:删除(delete),变更(update) 语句不使用LIMIT。

  强制:删除(delete),变更(update) 操作超过1万行记录的表,WHERE条件一定要用到索引。

  强制:删除(delete),变更(update) 语句单个影响行数不能超过5千行。超过5千的,建议按5千一批分组处理,每处理一批需要SLEEP1秒。并禁止做成并发和多线程。(建议单条SQL更新影响2000条)

  强制:字符比较请使用相同类型和字符集,不同类型比较会发生类型转换无法使用索引,不同字符集比较也将导致无法使用索引。

  强制:禁止使用HINT强制使用索引。

  建议:拒绝3B 拒绝大sql语句:big sql 拒绝大事务:big transaction 拒绝大批量:big batch。以上情况请拆解成小事务,小批量处理。

  建议:OR改写为IN() or的效率是n级别; in的消息时log(n)级别;

  建议:OR改写为UNION,或在程序中去做merge,语句尽量保持简单。

  建议:in的个数建议控制在200以内;

  建议:limit高效分页limit越大,效率越低。建议=采用主键id > $last_selected_id limit 10;

  建议:没有去重需求请使用union all替代union。

  建议:少用join连接;不使用子查询,子查询请转化为JOIN操作。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
SQL 关系型数据库 MySQL
【MySQL】根据binlog日志获取回滚sql的一个开发思路
【MySQL】根据binlog日志获取回滚sql的一个开发思路
|
10月前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
445 1
|
11月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
12月前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
12月前
|
SQL 关系型数据库 MySQL
PHP与MySQL协同工作的艺术:开发高效动态网站
在这个后端技术迅速迭代的时代,PHP和MySQL的组合仍然是创建动态网站和应用的主流选择之一。本文将带领读者深入理解PHP后端逻辑与MySQL数据库之间的协同工作方式,包括数据的检索、插入、更新和删除操作。文章将通过一系列实用的示例和最佳实践,揭示如何充分利用这两种技术的优势,构建高效、安全且易于维护的动态网站。
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
278 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
关系型数据库 MySQL Linux
数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)
无论是对于初学者还是有经验的开发者,了解MySQL的安装、客户端使用、数据类型、运算符和语法规范都是至关重要的。这不仅有助于高效地管理和查询数据,而且对于设计和实现数据库解决方案来说是基础工作。通过深入学习和实践这些知识,您可以更好地发挥MySQL数据库的强大功能。
109 2
|
存储 SQL 运维
运维开发.MySQL.范式与反范式化
运维开发.MySQL.范式与反范式化
119 1
|
SQL 关系型数据库 MySQL
MySQL中一定要遵守的12个SQL规范
本文档提供了12条SQL编写和数据库管理的最佳实践建议,旨在帮助开发者提高SQL查询效率、增强数据库安全性及可维护性。
390 1
|
存储 关系型数据库 MySQL
MySQL数据库开发进阶:精通数据库表的创建与管理22
【7月更文挑战第22天】数据库的创建与删除,数据表的创建与管理
147 1

推荐镜像

更多