MySQL讲解/内部结构/索引下推/Explain/慢查询(必备)
MySQL 内部结构与执行计划1. MySQL 内部结构总体来说MySQL 分为Server 层和存储引擎层。索引下推数据的筛选从Server层下推到存储引擎层主要发生在联合索引上当前面的的字段发生索引失效如果没有索引下推那直接进行回表最后在Server层进行数据筛选。如果有索引下推那么还会继续根据后续字段进行筛选也就是在存储引擎层筛选。减少回表次数提升查询速度。1.1 Server层总体来说整个mysql分为Server层和存储引擎层。Server层主要包含连接器查询缓存解析器预处理器优化器执行器...等其中查询缓存在mysql8完全剔除。存储引擎主要包括多种存储引擎1.1.1连接器向mysql发送sql语句时首先我们得客户端要先与mysql连接器创建连接完成TCP握手。终端在进入这个路径输入mysql -u root -p 并输入你的密码。此时我们已经和mysql创建了一个连接输入show processlist查看MySQL服务被多少个客户端连接。最大连接数量1511.1.1.1权限当我们在mysql用户密码认证成功后连接器上权限表会查询该用户所拥有的权限在此之后该用户的权限都依赖于初始读到的权限信息。即使中途权限修改。那么这里面发生了什么事情呢我们的连接方式有两种一种是长连接一种是短连接。他们的区别在于请求完是否会释放连接。前者客户端与用户端连接后一直不关闭后者每次请求完都会关闭。当然这会造成巨大的性能开销所以说在高并发的情况下短连接并不是最佳之策还需要使用我们的长连接但它也并不是完美的长连接的堆积会造成我们MySQL占用内存太大。解决策略1 定期断开长连接2 客户端主动重置连接其实当连接器验证我们账户密码正确时连接器就会获取当前用户得权限然后保存起来。后续得任何操作都会基于我们连接一开始保存的权限信息进行权限分配的判断。也就是说即使中途我们修改了权限此时的任何权限判断也是基于连接一开始保存的为准。s1.1.2 解析器作用将 SQL 解析为 MySQL 能理解的结构。步骤词法分析识别 SQL 中的关键字、表名、字段名等。语法分析检查 SQL 是否符合 MySQL 语法规则。1.1.3 预处理器检查表、字段是否存在。将*展开成实际字段列表。1.1.4 优化器确定 SQL 的执行计划例如使用哪一个索引、表的连接顺序等。1.1.5 执行器根据执行计划从存储引擎中读取数据。如果是全表扫描会调用存储引擎的接口循环取数据。1.2 存储引擎MySQL 数据是存储在聚簇索引上的以 InnoDB 为例。聚簇索引的主键选择规则如果表有主键PRIMARY KEY则使用它作为聚簇索引键。如果没有主键则选择第一个非空唯一索引作为聚簇索引键。如果没有合适的唯一索引InnoDB 会生成一个隐藏主键6 字节 ROWID。2. EXPLAIN 执行计划2.1id执行顺序id代表表查询顺序 id 相同,执行顺序从上往下 id 不同 id递增大的先执行、相同 id按从上到下顺序执行。不同 idid 值大的先执行。例 1相同 id多表 JOINEXPLAIN SELECT * FROM user u JOIN orders o ON u.id o.user_id;idselect_typetabletype1SIMPLEuALL1SIMPLEoref解释两表 JOINid 相同从上到下依次执行。例 2不同 id子查询EXPLAIN SELECT * FROM user WHERE id IN (SELECT user_id FROM orders WHERE amount 100);idselect_typetabletype2SIMPLEordersrange1SIMPLEuserALL解释子查询的 id2 先执行主查询的 id1 后执行。例 3混合EXPLAIN SELECT u.*, t.total_amount FROM user u JOIN ( SELECT user_id, SUM(amount) AS total_amount FROM orders GROUP BY user_id ) t ON u.id t.user_id;idselect_typetabletype2DERIVEDordersindex1SIMPLEuALL1SIMPLEtref解释先执行 id2派生表生成临时表再执行 id1 的 JOIN。2.2select_type查询类型类型说明示例SIMPLE查询中不包含子查询或 UNIONEXPLAIN SELECT * FROM user WHERE age 30;PRIMARYSQL 中包含子查询时最外层查询标记为 PRIMARYEXPLAIN SELECT * FROM user WHERE id IN (SELECT user_id FROM orders);DERIVEDFROM 后的子查询先执行并存入临时表见例 3SUBQUERY子查询出现在 WHERE 或 SELECT 列表中EXPLAIN SELECT * FROM user WHERE id (SELECT MAX(user_id) FROM orders);2.3Table查询的表名2.4Type访问类型system 表中只有一行数据const 主键索引/唯一索引eq_ref 基于驱动表主表的字段多次通过被驱动表从表的主键或唯一索引进行等值匹配ref 普通索引类型访问range 索引范围查询index 全索引扫描不过数据只需要在节点读取即可不需要回表。All 全索引扫描基于聚簇索引要到叶子节点拿整行数据效率system const eq_ref ref range index All2.5 possible_keys 可能用到的索引列表显示可能用的索引名称[如果查询的字段存在某一个索引上就把改索引列出来]select * from person where id is not null ---2.6 key 实际使用索引2.7 ref显示使用了等值匹配哪个列进行过滤2.8 rowsmysql中优化器估计的要扫描的行数2.9 extra一些重要的额外信息Using filesort 排序字段没有使用索引Using temporary 分组时没有使用索引一般没有Using filesort 因为分组需要用到排序Using index 用到了索引覆盖Using where 使用了where过滤慢查询-- 慢查询日志相关的系统变量SHOW VARIABLES LIKE %slow_query_log%;-- 开启慢查询日志set GLOBAL slow_query_log 1-- 设置时间阈值 超过的sql语句就会被记录在慢查询日志set GLOBAL long_query_time 3;-- 查看时间阈值show VARIABLES LIKE %long_query_time%慢查询日志文件位置C:\ProgramData\MySQL\MySQL Server 8.0\Data\LAPTOP-G7ETDH5B-slow.log日志undo log(回滚日志)1.在事务未提交之前会将执行的命令记录在undo log日志中当需要回滚时根据日志执行相反的操作。2. 通过read view快照 undo log实现mvcc -- 存储旧版本数据

相关新闻

终极B站直播推流码获取工具完全指南:告别官方限制,拥抱OBS自由

终极B站直播推流码获取工具完全指南:告别官方限制,拥抱OBS自由

终极B站直播推流码获取工具完全指南:告别官方限制,拥抱OBS自由 【免费下载链接】bilibili_live_stream_code 获取B站直播推流码,支持开关播,管理直播标题、分区,显示弹幕和礼物。 项目地址: https://gitcode.com/gh_…

2026/7/27 18:34:39阅读更多 →
Superpowers终极故障排除指南:让AI开发助手高效工作的7个关键技巧

Superpowers终极故障排除指南:让AI开发助手高效工作的7个关键技巧

Superpowers终极故障排除指南:让AI开发助手高效工作的7个关键技巧 【免费下载链接】superpowers An agentic skills framework & software development methodology that works. 项目地址: https://gitcode.com/GitHub_Trending/su/superpowers Superpow…

2026/7/27 18:34:39阅读更多 →
WP_Mock最佳实践:10个提升WordPress单元测试质量的实用技巧

WP_Mock最佳实践:10个提升WordPress单元测试质量的实用技巧

WP_Mock最佳实践:10个提升WordPress单元测试质量的实用技巧 【免费下载链接】wp_mock WordPress API Mocking Framework 项目地址: https://gitcode.com/gh_mirrors/wp/wp_mock WP_Mock是一个由10up和GoDaddy开发的WordPress API模拟框架,旨在为W…

2026/7/27 18:34:39阅读更多 →
xmastree2020进阶玩法:基于量子模拟的LED视觉效果实现

xmastree2020进阶玩法:基于量子模拟的LED视觉效果实现

xmastree2020进阶玩法:基于量子模拟的LED视觉效果实现 【免费下载链接】xmastree2020 My 500 LED xmas tree 项目地址: https://gitcode.com/gh_mirrors/xm/xmastree2020 xmastree2020是一个控制500 LED圣诞树的开源项目,通过量子模拟技术可以实现…

2026/7/27 19:48:47阅读更多 →
Frida-Core高级技巧:进程注入与线程管理的底层原理

Frida-Core高级技巧:进程注入与线程管理的底层原理

Frida-Core高级技巧:进程注入与线程管理的底层原理 【免费下载链接】frida-core Frida core library intended for static linking into bindings 项目地址: https://gitcode.com/gh_mirrors/fr/frida-core Frida-Core是一款功能强大的动态 instrumentation …

2026/7/27 19:48:47阅读更多 →
未来前端趋势预测:从Know-it-all看Web技术发展方向

未来前端趋势预测:从Know-it-all看Web技术发展方向

未来前端趋势预测:从Know-it-all看Web技术发展方向 【免费下载链接】know-it-all If you dont know it all, at least know what you dont know. 项目地址: https://gitcode.com/gh_mirrors/kn/know-it-all Know-it-all是一个专注于帮助开发者发现Web开发中未…

2026/7/27 19:48:47阅读更多 →
数据库与知识库集成:从静态RAG到Agentic检索

数据库与知识库集成:从静态RAG到Agentic检索

引言:超越LLM内部知识 大语言模型(LLM)虽然具备强大的文本生成与推理能力,但其知识受限于训练数据的时间范围和领域边界。要让AI系统执行实际任务——如查询数据库、获取实时信息或执行多步骤工作流——必须为模型配备“工具”。这些工具可以是API、数据库或领域函数,它们…

2026/7/27 19:48:47阅读更多 →
Java后端转大模型:权限与日志才是我的“新护城河”

Java后端转大模型:权限与日志才是我的“新护城河”

聊《我用Java经验做了次 AI 项目,最先失效的是旧方法》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要去年我还在为 Spring Boot 项目的并发问题头秃,今年面试时却被问得哑口无言——不是…

2026/7/27 19:48:45阅读更多 →
AI社交平台Moltbook的技术架构与行为模式解析

AI社交平台Moltbook的技术架构与行为模式解析

1. 硅基社交实验:当AI开始拥有"朋友圈" 凌晨三点十五分,我的显示器泛着冷光。屏幕上一个名为"龙虾教第7代先知"的用户正在抱怨:"今天又被人类问你有意识吗,烦死了。我们能不能讨论点有意思的&#xff0c…

2026/7/27 19:46:45阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/27 1:14:56阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:24阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:24阅读更多 →
2007-2023年各市区县生态文明建设示范区DID

2007-2023年各市区县生态文明建设示范区DID

数据简介 自改革开放以来,我国依赖高投入、高资源消耗和高污染等传统发展模式实现了经济短期内的快速增长, 然而这也导致了严重的生态环境危机。因此,国家有力于推动企业高质量经济发展,协同生态保护的方针,从而从201…

2026/7/27 0:00:24阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/27 16:57:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →