Mysql Technical Blog

MySQL 技术要点 一、MySQL 架构 MySQL 采用分层架构设计,主要分为 Server 层 和 存储引擎层。 1.1 Server 层 组件 职责 连接器 管理客户端连接、身份认证、权限校验 分析器 词法分析(识别关键字、表名、列名)、语法分析(构建语法树) 优化器 生成执行计划、选择最优索引、决定 JOIN 顺序 执行器 调用存储引擎 API 执行查询,返回结果集 1.2 存储引擎层 MySQL 支持插件式存储引擎,常用引擎对比: 引擎 事务支持 锁粒度 适用场景 InnoDB ✓ 行锁 OLTP、高并发读写 MyISAM ✗ 表锁 只读或读多写少 Memory ✗ 表锁 临时表、缓存 InnoDB architecture 二、索引机制 2.1 索引数据结构 类型 特点 适用场景 B+ Tree 有序、支持范围查询、树高稳定 主键索引、普通索引 Hash O(1) 查找、不支持范围查询 等值查询(Memory 引擎) Full-Text 倒排索引、支持自然语言搜索 全文检索 2.2 索引分类 按物理存储: ...

January 15, 2026

Mysql Slow Query Filesort Optimization

IM 消息拉取接口的 SQL 优化记录 1. 背景与问题 在开发 IM 系统的“拉取历史消息”功能时,我发现当单张消息表(messages)的数据量达到百万级,且某个热点会话(conversation_id)拥有超过 10 万条消息时,接口响应出现明显卡顿。 环境信息: 数据库:MySQL 8.0+ (InnoDB) 数据量:单表 100 万行,大会话 10 万条信息 场景:用户查看最新的 20 条消息(Top-N 查询) 慢查询 SQL: SQLSELECT * FROM messages WHERE conversation_id = 'chat_hot' ORDER BY seq DESC LIMIT 20; 2. 排查过程 2.1 慢日志抓取 开启 MySQL 慢查询日志(log_output=FILE, long_query_time=0.1),捕获到该语句的执行情况: TEXT# Query_time: 0.148528 Lock_time: 0.000003 Rows_sent: 20 Rows_examined: 151676 异常点:为了返回 20 条数据,MySQL 实际扫描了 15 万行数据。扫描/返回比极低,说明索引效率存在严重问题。 2.2 执行计划分析 (EXPLAIN) 执行 EXPLAIN 查看当前索引使用情况: ...

December 28, 2025