原文链接 | https://zhuanlan.zhihu.com/p/617471574
要保证 MySQL 运行,首先要缩小数据库容量。保证每个 SQL 只需要查询当前需要查询的内容,尽量取更少的数据,节约单个服务器的 IO。使用分页、分表、分区等技术,控制单表的数据量和查询范围,这种就是保证读取的少
使用缓存、读写分离、集群等技术,提高并发处理能力和可用性
根据业务特点和数据类型,设计合理的数据模型和架构
定期清理过期或无用的数据,避免数据膨胀,比如只保留一个月
- 存储引擎、索引等,减少数据访问和存储的开销 -- 重要的是别用 varchar。如果一定要用 varchar,保持在 100 以内,数据库大了不好处理,varchar 最容易使数据库增大,utfmb4 是一个汉字用四个字节存储的。
以上所有工作都是为了保证数据不膨胀太大。之前 Oracle 数据库超过 100T 就无法维护了,就是这个原因。MySQL 不能超过 1T,虽然说 MySQL 的容量可以无限扩展,但查询有代价,表太大了性能就差。每个 SQL 都有审核,审核有据可查。多人负责能找到责任人。对于 DDL 表单,需查看一些表设计是否符合规范。可以自己建立一套 SQL 审核体系。对于 DML 保证有据可查是谁改的。改错了可以快速回退。对于 DDL 的变动:dev > test > stg > prod执行时间限制:dev 2s > test 2s > stg 2s > prod 10s把运行卡顿的 SQL 拒绝在门外,你可以限制执行时间,也可以记录慢 SQL 让开发改造。在没有修复慢 SQL 前不准上线,因为每到一个新的环境,执行的成本就越高。其实也可以做物理上的限制来要求开发的 SQL 性能要好,比如 dev 环境 2 核心,test 环境 4 核心,stg 环境 8 核心。根据我的搜索结果,Bytebase 是一个数据库管理平台,可以帮助你管理 MySQL 的架构变更、备份、记录变更历史等。它也支持 SQL 审核、SQL 建议、SQL 编辑器、GitOps 工作流等功能,可以提高你的数据库开发和维护效率。如果你想使用 Bytebase 优化 MySQL 的字段类型、字符集、存储引擎、索引等,你可以参考以下的步骤:剩下的就是指定 SQL 审核规范,可以通过 Bytebase 来限制,比如遵循一些命名、建表、索引等规范,保证数据库的可维护性和可扩展性。
建表规约

索引规约

SQL 语句

ORM 映射
1.【强制】在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。说明:① 增加查询分析器解析成本。② 增减字段容易与 resultMap 配置不一致。2.【强制】POJO 类的布尔属性不能加 is,而数据库字段必须加 is_,要求在 resultMap 中进行字段与属性之间的映射。说明:参见定义 POJO 类以及数据库字段定义规定,在其中增加映射,是必须的。在 MyBatis Generator 生成的代码中,需要进行对应的修改。3.【强制】不要用 resultClass 当返回参数,即使所有类属性名与数据库字段一一对应,也需要定义;反过来,每一个表也必然有一个与之对应。说明:配置映射关系,使字段与 DO 类解耦,方便维护。4.【强制】sql.xml 配置参数使用:#{},#param# 不要使用 ${} 此种方式,容易出现 SQL 注入。5.【强制】iBATIS 自带的 queryForList(StringstatementName,intstart,intsize) 不推荐使用。说明:其实现方式是在数据库取到 statementName 对应的 SQL 语句的所有记录,再通过 subList 取 start,size 的子集合。

