1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Update MySQL高性能优化规范建议.md

This commit is contained in:
SnailClimb 2019-04-08 07:53:47 +08:00 committed by GitHub
parent deda642e62
commit 3511e18a9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,14 +1,14 @@
作者: 听风,原文地址: <https://www.cnblogs.com/huchong/p/10219318.html>。JavaGuide已获得作者授权。
> 作者: 听风,原文地址: <https://www.cnblogs.com/huchong/p/10219318.html>。JavaGuide 已获得作者授权。
<!-- TOC -->
- [数据库命令规范](#数据库命令规范)
- [数据库基本设计规范](#数据库基本设计规范)
- [1. 所有表必须使用Innodb存储引擎](#1-所有表必须使用innodb存储引擎)
- [2. 数据库和表的字符集统一使用UTF8](#2-数据库和表的字符集统一使用utf8)
- [1. 所有表必须使用 Innodb 存储引擎](#1-所有表必须使用-innodb-存储引擎)
- [2. 数据库和表的字符集统一使用 UTF8](#2-数据库和表的字符集统一使用-utf8)
- [3. 所有表和字段都需要添加注释](#3-所有表和字段都需要添加注释)
- [4. 尽量控制单表数据量的大小,建议控制在500万以内。](#4-尽量控制单表数据量的大小建议控制在500万以内)
- [5. 谨慎使用MySQL分区表](#5-谨慎使用mysql分区表)
- [4. 尽量控制单表数据量的大小,建议控制在 500 万以内。](#4-尽量控制单表数据量的大小建议控制在-500-万以内)
- [5. 谨慎使用 MySQL 分区表](#5-谨慎使用-mysql-分区表)
- [6.尽量做到冷热数据分离,减小表的宽度](#6尽量做到冷热数据分离减小表的宽度)
- [7. 禁止在表中建立预留字段](#7-禁止在表中建立预留字段)
- [8. 禁止在数据库中存储图片,文件等大的二进制数据](#8-禁止在数据库中存储图片文件等大的二进制数据)
@ -16,40 +16,40 @@
- [10. 禁止从开发环境,测试环境直接连接生成环境数据库](#10-禁止从开发环境测试环境直接连接生成环境数据库)
- [数据库字段设计规范](#数据库字段设计规范)
- [1. 优先选择符合存储需要的最小的数据类型](#1-优先选择符合存储需要的最小的数据类型)
- [2. 避免使用TEXT,BLOB数据类型最常见的TEXT类型可以存储64k的数据](#2-避免使用textblob数据类型最常见的text类型可以存储64k的数据)
- [3. 避免使用ENUM类型](#3-避免使用enum类型)
- [4. 尽可能把所有列定义为NOT NULL](#4-尽可能把所有列定义为not-null)
- [5. 使用TIMESTAMP(4个字节)或DATETIME类型(8个字节)存储时间](#5-使用timestamp4个字节或datetime类型8个字节存储时间)
- [6. 同财务相关的金额类数据必须使用decimal类型](#6-同财务相关的金额类数据必须使用decimal类型)
- [2. 避免使用 TEXT,BLOB 数据类型,最常见的 TEXT 类型可以存储 64k 的数据](#2-避免使用-textblob-数据类型最常见的-text-类型可以存储-64k-的数据)
- [3. 避免使用 ENUM 类型](#3-避免使用-enum-类型)
- [4. 尽可能把所有列定义为 NOT NULL](#4-尽可能把所有列定义为-not-null)
- [5. 使用 TIMESTAMP(4 个字节) DATETIME 类型 (8 个字节) 存储时间](#5-使用-timestamp4-个字节--datetime-类型-8-个字节-存储时间)
- [6. 同财务相关的金额类数据必须使用 decimal 类型](#6-同财务相关的金额类数据必须使用-decimal-类型)
- [索引设计规范](#索引设计规范)
- [1. 限制每张表上的索引数量,建议单张表索引不超过5个](#1-限制每张表上的索引数量建议单张表索引不超过5个)
- [1. 限制每张表上的索引数量,建议单张表索引不超过 5 个](#1-限制每张表上的索引数量建议单张表索引不超过-5-个)
- [2. 禁止给表中的每一列都建立单独的索引](#2-禁止给表中的每一列都建立单独的索引)
- [3. 每个Innodb表必须有个主键](#3-每个innodb表必须有个主键)
- [3. 每个 Innodb 表必须有个主键](#3-每个-innodb-表必须有个主键)
- [4. 常见索引列建议](#4-常见索引列建议)
- [5.如何选择索引列的顺序](#5如何选择索引列的顺序)
- [6. 避免建立冗余索引和重复索引(增加了查询优化器生成执行计划的时间)](#6-避免建立冗余索引和重复索引增加了查询优化器生成执行计划的时间)
- [7. 对于频繁的查询优先考虑使用覆盖索引](#7-对于频繁的查询优先考虑使用覆盖索引)
- [8.索引SET规范](#8索引set规范)
- [数据库SQL开发规范](#数据库sql开发规范)
- [8.索引 SET 规范](#8索引-set-规范)
- [数据库 SQL 开发规范](#数据库-sql-开发规范)
- [1. 建议使用预编译语句进行数据库操作](#1-建议使用预编译语句进行数据库操作)
- [2. 避免数据类型的隐式转换](#2-避免数据类型的隐式转换)
- [3. 充分利用表上已经存在的索引](#3-充分利用表上已经存在的索引)
- [4. 数据库设计时,应该要对以后扩展进行考虑](#4-数据库设计时应该要对以后扩展进行考虑)
- [5. 程序连接不同的数据库使用不同的账号,进制跨库查询](#5-程序连接不同的数据库使用不同的账号进制跨库查询)
- [6. 禁止使用SELECT * 必须使用SELECT <字段列表> 查询](#6-禁止使用select--必须使用select-字段列表-查询)
- [7. 禁止使用不含字段列表的INSERT语句](#7-禁止使用不含字段列表的insert语句)
- [8. 避免使用子查询,可以把子查询优化为join操作](#8-避免使用子查询可以把子查询优化为join操作)
- [9. 避免使用JOIN关联太多的表](#9-避免使用join关联太多的表)
- [6. 禁止使用 SELECT * 必须使用 SELECT <字段列表> 查询](#6-禁止使用-select--必须使用-select-字段列表-查询)
- [7. 禁止使用不含字段列表的 INSERT 语句](#7-禁止使用不含字段列表的-insert-语句)
- [8. 避免使用子查询,可以把子查询优化为 join 操作](#8-避免使用子查询可以把子查询优化为-join-操作)
- [9. 避免使用 JOIN 关联太多的表](#9-避免使用-join-关联太多的表)
- [10. 减少同数据库的交互次数](#10-减少同数据库的交互次数)
- [11. 对应同一列进行or判断时使用in代替or](#11-对应同一列进行or判断时使用in代替or)
- [12. 禁止使用order by rand() 进行随机排序](#12-禁止使用order-by-rand-进行随机排序)
- [13. WHERE从句中禁止对列进行函数转换和计算](#13-where从句中禁止对列进行函数转换和计算)
- [14. 在明显不会有重复值时使用UNION ALL 而不是UNION](#14-在明显不会有重复值时使用union-all-而不是union)
- [15. 拆分复杂的大SQL为多个小SQL](#15-拆分复杂的大sql为多个小sql)
- [11. 对应同一列进行 or 判断时,使用 in 代替 or](#11-对应同一列进行-or-判断时使用-in-代替-or)
- [12. 禁止使用 order by rand() 进行随机排序](#12-禁止使用-order-by-rand-进行随机排序)
- [13. WHERE 从句中禁止对列进行函数转换和计算](#13-where-从句中禁止对列进行函数转换和计算)
- [14. 在明显不会有重复值时使用 UNION ALL 而不是 UNION](#14-在明显不会有重复值时使用-union-all-而不是-union)
- [15. 拆分复杂的大 SQL 为多个小 SQL](#15-拆分复杂的大-sql-为多个小-sql)
- [数据库操作行为规范](#数据库操作行为规范)
- [1. 超100万行的批量写(UPDATE,DELETE,INSERT)操作,要分批多次进行操作](#1-超100万行的批量写updatedeleteinsert操作要分批多次进行操作)
- [2. 对于大表使用pt-online-schema-change修改表结构](#2-对于大表使用pt-online-schema-change修改表结构)
- [3. 禁止为程序使用的账号赋予super权限](#3-禁止为程序使用的账号赋予super权限)
- [1. 超 100 万行的批量写 (UPDATE,DELETE,INSERT) 操作,要分批多次进行操作](#1-超-100-万行的批量写-updatedeleteinsert-操作要分批多次进行操作)
- [2. 对于大表使用 pt-online-schema-change 修改表结构](#2-对于大表使用-pt-online-schema-change-修改表结构)
- [3. 禁止为程序使用的账号赋予 super 权限](#3-禁止为程序使用的账号赋予-super-权限)
- [4. 对于程序连接数据库账号,遵循权限最小原则](#4-对于程序连接数据库账号遵循权限最小原则)
<!-- /TOC -->