Mysql开发设计规范

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:   让数据库多做它擅长的事:合理使用字段类型和定义字段长度,做到够用即可,尽量不在数据库做运算,复杂运算请移到程序端处理,尽可能简单应用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操作。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
SQL 关系型数据库 MySQL
【MySQL】根据binlog日志获取回滚sql的一个开发思路
【MySQL】根据binlog日志获取回滚sql的一个开发思路
|
28天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
2月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
3月前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
3月前
|
SQL 关系型数据库 MySQL
PHP与MySQL协同工作的艺术:开发高效动态网站
在这个后端技术迅速迭代的时代,PHP和MySQL的组合仍然是创建动态网站和应用的主流选择之一。本文将带领读者深入理解PHP后端逻辑与MySQL数据库之间的协同工作方式,包括数据的检索、插入、更新和删除操作。文章将通过一系列实用的示例和最佳实践,揭示如何充分利用这两种技术的优势,构建高效、安全且易于维护的动态网站。
|
3月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
86 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
5月前
|
关系型数据库 MySQL Linux
数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)
无论是对于初学者还是有经验的开发者,了解MySQL的安装、客户端使用、数据类型、运算符和语法规范都是至关重要的。这不仅有助于高效地管理和查询数据,而且对于设计和实现数据库解决方案来说是基础工作。通过深入学习和实践这些知识,您可以更好地发挥MySQL数据库的强大功能。
37 2
|
5月前
|
存储 SQL 运维
运维开发.MySQL.范式与反范式化
运维开发.MySQL.范式与反范式化
64 1
|
5月前
|
SQL 关系型数据库 MySQL
MySQL中一定要遵守的12个SQL规范
本文档提供了12条SQL编写和数据库管理的最佳实践建议,旨在帮助开发者提高SQL查询效率、增强数据库安全性及可维护性。
150 1
|
5月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
560 0