<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>MySQL on 我的技术博客</title><link>https://buvidk1234.github.io/tags/mysql/</link><description>Recent content in MySQL on 我的技术博客</description><generator>Hugo -- 0.153.0</generator><language>zh-cn</language><lastBuildDate>Thu, 15 Jan 2026 02:27:08 +0800</lastBuildDate><atom:link href="https://buvidk1234.github.io/tags/mysql/index.xml" rel="self" type="application/rss+xml"/><item><title>Mysql Technical Blog</title><link>https://buvidk1234.github.io/posts/mysql-technical-blog/</link><pubDate>Thu, 15 Jan 2026 02:27:08 +0800</pubDate><guid>https://buvidk1234.github.io/posts/mysql-technical-blog/</guid><description>&lt;h1 id="mysql-技术要点"&gt;MySQL 技术要点&lt;/h1&gt;
&lt;h2 id="一mysql-架构"&gt;一、MySQL 架构&lt;/h2&gt;
&lt;p&gt;MySQL 采用分层架构设计，主要分为 &lt;strong&gt;Server 层&lt;/strong&gt; 和 &lt;strong&gt;存储引擎层&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="11-server-层"&gt;1.1 Server 层&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;组件&lt;/th&gt;
&lt;th&gt;职责&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;连接器&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;管理客户端连接、身份认证、权限校验&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;分析器&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;词法分析（识别关键字、表名、列名）、语法分析（构建语法树）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;优化器&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;生成执行计划、选择最优索引、决定 JOIN 顺序&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;执行器&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;调用存储引擎 API 执行查询，返回结果集&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="12-存储引擎层"&gt;1.2 存储引擎层&lt;/h3&gt;
&lt;p&gt;MySQL 支持插件式存储引擎，常用引擎对比：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;引擎&lt;/th&gt;
&lt;th&gt;事务支持&lt;/th&gt;
&lt;th&gt;锁粒度&lt;/th&gt;
&lt;th&gt;适用场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;InnoDB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;行锁&lt;/td&gt;
&lt;td&gt;OLTP、高并发读写&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MyISAM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;表锁&lt;/td&gt;
&lt;td&gt;只读或读多写少&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;表锁&lt;/td&gt;
&lt;td&gt;临时表、缓存&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;InnoDB architecture&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Innodb-architecture" loading="lazy" src="https://buvidk1234.github.io/images/innodb-architecture-8-0.png"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="二索引机制"&gt;二、索引机制&lt;/h2&gt;
&lt;h3 id="21-索引数据结构"&gt;2.1 索引数据结构&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;特点&lt;/th&gt;
&lt;th&gt;适用场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;B+ Tree&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;有序、支持范围查询、树高稳定&lt;/td&gt;
&lt;td&gt;主键索引、普通索引&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hash&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;O(1) 查找、不支持范围查询&lt;/td&gt;
&lt;td&gt;等值查询（Memory 引擎）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Full-Text&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;倒排索引、支持自然语言搜索&lt;/td&gt;
&lt;td&gt;全文检索&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-索引分类"&gt;2.2 索引分类&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;按物理存储：&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Mysql Slow Query Filesort Optimization</title><link>https://buvidk1234.github.io/posts/mysql-slow-query-filesort-optimization/</link><pubDate>Sun, 28 Dec 2025 22:27:08 +0800</pubDate><guid>https://buvidk1234.github.io/posts/mysql-slow-query-filesort-optimization/</guid><description>&lt;h1 id="im-消息拉取接口的-sql-优化记录"&gt;IM 消息拉取接口的 SQL 优化记录&lt;/h1&gt;
&lt;h3 id="1-背景与问题"&gt;1. 背景与问题&lt;/h3&gt;
&lt;p&gt;在开发 IM 系统的“拉取历史消息”功能时，我发现当单张消息表（&lt;code&gt;messages&lt;/code&gt;）的数据量达到百万级，且某个热点会话（&lt;code&gt;conversation_id&lt;/code&gt;）拥有超过 10 万条消息时，接口响应出现明显卡顿。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;环境信息：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数据库：MySQL 8.0+ (InnoDB)&lt;/li&gt;
&lt;li&gt;数据量：单表 100 万行，大会话 10 万条信息&lt;/li&gt;
&lt;li&gt;场景：用户查看最新的 20 条消息（Top-N 查询）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;慢查询 SQL：&lt;/strong&gt;&lt;/p&gt;
&lt;details class="code-fold" open&gt;
&lt;summary&gt;SQL&lt;/summary&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;SELECT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;FROM&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;messages&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;WHERE&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;conversation_id&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;chat_hot&amp;#39;&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;ORDER&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;BY&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;seq&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#cf222e"&gt;DESC&lt;/span&gt;&lt;span style="color:#fff"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;LIMIT&lt;/span&gt;&lt;span style="color:#fff"&gt; &lt;/span&gt;&lt;span style="color:#0550ae"&gt;20&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/details&gt;
&lt;h3 id="2-排查过程"&gt;2. 排查过程&lt;/h3&gt;
&lt;h4 id="21-慢日志抓取"&gt;2.1 慢日志抓取&lt;/h4&gt;
&lt;p&gt;开启 MySQL 慢查询日志（&lt;code&gt;log_output=FILE&lt;/code&gt;, &lt;code&gt;long_query_time=0.1&lt;/code&gt;），捕获到该语句的执行情况：&lt;/p&gt;
&lt;details class="code-fold" open&gt;
&lt;summary&gt;TEXT&lt;/summary&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Query_time: 0.148528 Lock_time: 0.000003 Rows_sent: 20 Rows_examined: 151676&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/details&gt;
&lt;p&gt;&lt;strong&gt;异常点&lt;/strong&gt;：为了返回 20 条数据，MySQL 实际扫描了 15 万行数据。扫描/返回比极低，说明索引效率存在严重问题。&lt;/p&gt;
&lt;h4 id="22-执行计划分析-explain"&gt;2.2 执行计划分析 (EXPLAIN)&lt;/h4&gt;
&lt;p&gt;执行 &lt;code&gt;EXPLAIN&lt;/code&gt; 查看当前索引使用情况：
&lt;img alt="sql_optimization_before_explain" loading="lazy" src="https://buvidk1234.github.io/images/sql_optimization_before_explain.png"&gt;&lt;/p&gt;</description></item></channel></rss>