MySQL性能分析
表设计准则
🐤满足关系数据库的三范式
1NF
- 是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值
- 第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库
2NF
- 要求数据库表中的每个实例或行必须可以被惟一地区分
- 设置主键
3NF
- 要求一个数据库表中不包含已在其它表中已包含的非主关键字信息
- 两张表不要重复的字段,通常都是设置外键
🐱🏍大表拆小表,有大数据的列单独拆成小表
- 在一个数据库中,一般不会设计属性过多的表
- 在一个数据库中,一般不会有超过
500/1000
万数据的表,如果有按需求进行看需不需要拆表- 有大数据的列单独拆成小表(富文本编辑器,CKeditor)
DQL 的执行过程
SQL 的执行过程
- 客户端发送一条查询SQL语句给服务器
- 服务器通过权限检查之后,先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段
- 服务器端进行SQL解析、预处理,再由优化器根据该SQL所涉及到的数据表的统计信息进行计算,生成对应的执行计划
- MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询
- 将结果返回给客户端
查询优化器
- 写的任何SQL, 到底是怎么样真正执行的, 按照什么条件查询, 最后执行的顺序, 可能都会有多个执行方案
- 查询优化器根据对数据表的统计信息 (比如索引, 有多少条数据) 在真正执行一条SQL之前, 会根据自己内部的数据, 进行综合的查询
- 根据 MySQL 自身的统计信息, 从多种执行方案当中, 选择一个它认为是最优的执行方案, 来去执行
🧎♀️做优化做什么
- 做优化, 就是想让查询优化器按照我们的想法, 帮我们选择最优的执行方案
- 让优化器选择符合程序员计划的执行语句, 来减少查询过程中产生的
IO
MySQL 常见瓶颈
- CPU 饱和
- 磁盘
I/0
读取数据大小- 服务器硬件比较底
🐱👤如何去判定一个SQL写的好与坏
Explain
查询执行计划
- 使用
explain
关键字,可以模拟优化器执行的 SQL 语句 - 从而知道 MySQL 是如何处理 SQL 语句的
- 通过
Explain
可以分析查询语句或表结构的性能瓶颈
作用
- 查看表的读取顺序
- 数据读取操作的操作类型
- 查看哪些索引可以使用
- 查看哪些索引被实际使用
- 查看表之间的引用
- 查看每张表有多少行被优化器执行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
2020-08-03 Redis