- 一个核心报表查询join两张大表,5.7时代跑了42秒,迁到8.0之后同一个SQL只跑2.1秒,SQL和索引都没动。团队一开始以为是新机器的功劳,EXPLAINFORMAT=TREE一看,执行计划里赫然写着Innerhashjoin——不是硬件,是优化器换代了。5.7处理无索引可用的join靠BlockNestedLoop(BNL):把驱动表按join_buffer_size分块装进内存,被... 一个核心报表查询join两张大表,5.7时代跑了42秒,迁到8.0之后同一个SQL只跑2.1秒,SQL和索引都没动。团队一开始以为是新机器的功劳,EXPLAINFORMAT=TREE一看,执行计划里赫然写着Innerhashjoin——不是硬件,是优化器换代了。5.7处理无索引可用的join靠BlockNestedLoop(BNL):把驱动表按join_buffer_size分块装进内存,被...
- MySQL 索引的本质是「用空间换时间」。InnoDB 的索引使用 B+ 树结构,叶子节点存放主键值或完整行数据,非叶子节点只存索引键,因此同样大小的页能容纳更多条目,树的高度更低,查询时从根节点逐层往下,通常只需 3 到 4 次磁盘 I/O 就能定位到数据。没有索引时,MySQL 只能全表扫描,百万行的表就要读几十万行。加了合适的索引,查询可以走「二级索引 + 回表」或「覆盖索引」直接返回... MySQL 索引的本质是「用空间换时间」。InnoDB 的索引使用 B+ 树结构,叶子节点存放主键值或完整行数据,非叶子节点只存索引键,因此同样大小的页能容纳更多条目,树的高度更低,查询时从根节点逐层往下,通常只需 3 到 4 次磁盘 I/O 就能定位到数据。没有索引时,MySQL 只能全表扫描,百万行的表就要读几十万行。加了合适的索引,查询可以走「二级索引 + 回表」或「覆盖索引」直接返回...
- MySQL索引底层原理:从B+树到聚簇索引本文深入剖析MySQL索引的底层实现原理,帮助你理解为什么索引能加速查询,以及如何设计高效的索引。 为什么索引能加速查询?没有索引时,MySQL需要全表扫描(Full Table Scan),时间复杂度O(n)。索引通过有序数据结构,将查询复杂度降低到O(log n)。 B+树:MySQL索引的核心 为什么选择B+树?数据结构优点缺点适用场景哈希表... MySQL索引底层原理:从B+树到聚簇索引本文深入剖析MySQL索引的底层实现原理,帮助你理解为什么索引能加速查询,以及如何设计高效的索引。 为什么索引能加速查询?没有索引时,MySQL需要全表扫描(Full Table Scan),时间复杂度O(n)。索引通过有序数据结构,将查询复杂度降低到O(log n)。 B+树:MySQL索引的核心 为什么选择B+树?数据结构优点缺点适用场景哈希表...
- 华为云作品展览馆投递实战:GitCode 仓库、SELF_VERIFY 自委托 STS 凭证、DevBridge 隧道、SATA 售罄故障排查与本地突围全记录。 华为云作品展览馆投递实战:GitCode 仓库、SELF_VERIFY 自委托 STS 凭证、DevBridge 隧道、SATA 售罄故障排查与本地突围全记录。
- 一、背景与痛点公司电商系统的订单、用户、商品数据全在 MySQL 里,日常运营需要看各种报表:今日订单量、GMV 实时走势各品类销售占比用户地域分布直接在 MySQL 上跑分析 SQL,问题很明显:锁表风险:大查询扫全表,业务写入被阻塞查询慢:多表 JOIN + 时间聚合,动辄十几秒维度单一:MySQL 不适合做多维分析,Cube 展开困难核心诉求:把分析流量从业务库剥离,用专门的 OLAP... 一、背景与痛点公司电商系统的订单、用户、商品数据全在 MySQL 里,日常运营需要看各种报表:今日订单量、GMV 实时走势各品类销售占比用户地域分布直接在 MySQL 上跑分析 SQL,问题很明显:锁表风险:大查询扫全表,业务写入被阻塞查询慢:多表 JOIN + 时间聚合,动辄十几秒维度单一:MySQL 不适合做多维分析,Cube 展开困难核心诉求:把分析流量从业务库剥离,用专门的 OLAP...
- 前言自增主键(AUTO_INCREMENT)几乎是每个 MySQL 表的默认选择,但它的行为并不总是"按预期连续递增"。这篇文章梳理几个高频踩坑点,以及 MySQL 8.0 做了哪些改进。坑一:自增 id 为什么会不连续?最常见的误解是"自增列一定连续递增"。实际上,事务回滚、唯一键冲突、批量插入失败都会导致已经分配的自增值被浪费,下一条记录不会复用它。这是设计取舍——为了避免并发插入时的锁... 前言自增主键(AUTO_INCREMENT)几乎是每个 MySQL 表的默认选择,但它的行为并不总是"按预期连续递增"。这篇文章梳理几个高频踩坑点,以及 MySQL 8.0 做了哪些改进。坑一:自增 id 为什么会不连续?最常见的误解是"自增列一定连续递增"。实际上,事务回滚、唯一键冲突、批量插入失败都会导致已经分配的自增值被浪费,下一条记录不会复用它。这是设计取舍——为了避免并发插入时的锁...
- 一文讲清 MySQL InnoDB 意向锁(IS/IX):为什么需要意向锁、IS 与 IX 的区别、兼容性速记表、三个会话的实际例子,以及线上 DDL 被长事务卡住时的排查步骤与常见误解。 一文讲清 MySQL InnoDB 意向锁(IS/IX):为什么需要意向锁、IS 与 IX 的区别、兼容性速记表、三个会话的实际例子,以及线上 DDL 被长事务卡住时的排查步骤与常见误解。
- 故障场景故障现象:nginx 正常,API 请求返回 500,应用日志指向 api_config.env missing。服务器状态:server1:状态 INJECTED;开始时间 2026-07-14 07:02:42 +0000;影响范围 练习项目局部不可用,SSH 不受影响。。server2:状态 INJECTED;开始时间 2026-07-14 15:02:50 +0800;影响... 故障场景故障现象:nginx 正常,API 请求返回 500,应用日志指向 api_config.env missing。服务器状态:server1:状态 INJECTED;开始时间 2026-07-14 07:02:42 +0000;影响范围 练习项目局部不可用,SSH 不受影响。。server2:状态 INJECTED;开始时间 2026-07-14 15:02:50 +0800;影响...
- 前几天,一张只有几万行的订单表,查一个用户最近 30 天的订单居然要两秒多。第一反应是“加个索引吧”,但加索引之前,我先跑了一次 EXPLAIN——这一步,决定了后面是真优化,还是把问题藏得更深。先看 type 和 rows。type 是 ALL,基本就是全表扫描;rows 很大,说明它扫描后还要再过滤。很多慢查询不是数据量大,而是条件根本没有走到索引。接着看 key:如果 key 是空,说... 前几天,一张只有几万行的订单表,查一个用户最近 30 天的订单居然要两秒多。第一反应是“加个索引吧”,但加索引之前,我先跑了一次 EXPLAIN——这一步,决定了后面是真优化,还是把问题藏得更深。先看 type 和 rows。type 是 ALL,基本就是全表扫描;rows 很大,说明它扫描后还要再过滤。很多慢查询不是数据量大,而是条件根本没有走到索引。接着看 key:如果 key 是空,说...
- 一个下单请求从浏览器到 MySQL 再返回的完整链路:DNS/TCP/TLS 握手、Nginx 转发、Filter 与 Interceptor、事务和连接池、Buffer Pool 与 redo log。附三个真实踩坑:Nginx 摘除故障节点、事务里调外部接口拖垮连接池、HikariCP 默认值不够用。 一个下单请求从浏览器到 MySQL 再返回的完整链路:DNS/TCP/TLS 握手、Nginx 转发、Filter 与 Interceptor、事务和连接池、Buffer Pool 与 redo log。附三个真实踩坑:Nginx 摘除故障节点、事务里调外部接口拖垮连接池、HikariCP 默认值不够用。
- 即席查询在产品里的定位,**不是"一个查询工具",而是数据中台里唯一一条"以人为中心、即时、只读、不进生产链路"的取数通道**。它同时承担三件事:1. **临时取数**:不建表、不发布、不进调度,跑完即弃;2. **开发自检**:任务开发完,用它验证"这段 SQL 跑出来的数对不对";3. **安全阀门**:把本来会去直连数据库的那批人收回平台内,用权限 + 白名单 + 限额 + 审计兜住。... 即席查询在产品里的定位,**不是"一个查询工具",而是数据中台里唯一一条"以人为中心、即时、只读、不进生产链路"的取数通道**。它同时承担三件事:1. **临时取数**:不建表、不发布、不进调度,跑完即弃;2. **开发自检**:任务开发完,用它验证"这段 SQL 跑出来的数对不对";3. **安全阀门**:把本来会去直连数据库的那批人收回平台内,用权限 + 白名单 + 限额 + 审计兜住。...
- 建索引是为了加速查询,但有时候索引建了,查询反而更慢。根因往往不在索引本身,在优化器的选择:它可能选了一个“看起来选择性很高”但实际回表代价巨大的索引,也可能触发了Index Merge,把两个索引的结果集合并,合并操作本身的开销超过全表扫描。本文拆解优化器选错索引的三种典型场景、Index Merge的代价链路,以及用EXPLAIN ANALYZE和FORCE INDEX定位问题的方法。 建索引是为了加速查询,但有时候索引建了,查询反而更慢。根因往往不在索引本身,在优化器的选择:它可能选了一个“看起来选择性很高”但实际回表代价巨大的索引,也可能触发了Index Merge,把两个索引的结果集合并,合并操作本身的开销超过全表扫描。本文拆解优化器选错索引的三种典型场景、Index Merge的代价链路,以及用EXPLAIN ANALYZE和FORCE INDEX定位问题的方法。
- 从删了大半张表磁盘没降、跑 OPTIMIZE 反倒更紧张切入,讲清 InnoDB 删数据不还空间的原因、DATA_FREE 的判断边界、OPTIMIZE 的在线重建代价与额外空间,给出该不该做的决策表,以及分区滑动与在线工具两种大表替代方案。 从删了大半张表磁盘没降、跑 OPTIMIZE 反倒更紧张切入,讲清 InnoDB 删数据不还空间的原因、DATA_FREE 的判断边界、OPTIMIZE 的在线重建代价与额外空间,给出该不该做的决策表,以及分区滑动与在线工具两种大表替代方案。
- MySQL 服务层中的优化器(Optimizer)是一个基于成本的优化器(Cost-Based Optimizer, CBO)。它在面对一条 SQL 语句时,会评估各种可能的执行计划(比如全表扫描、使用索引 A、使用索引 B),然后计算每种方案的“代价”(Cost),最终选择成本最低的那个方案来执行。以下是它计算成本的依据和具体过程:一、 优化器计算成本的两大核心依据优化器计算代价主要基于两... MySQL 服务层中的优化器(Optimizer)是一个基于成本的优化器(Cost-Based Optimizer, CBO)。它在面对一条 SQL 语句时,会评估各种可能的执行计划(比如全表扫描、使用索引 A、使用索引 B),然后计算每种方案的“代价”(Cost),最终选择成本最低的那个方案来执行。以下是它计算成本的依据和具体过程:一、 优化器计算成本的两大核心依据优化器计算代价主要基于两...
- 背景InnoDB 通过多版本并发控制(MVCC)实现读写不互相阻塞:普通的 SELECT 读取的是数据的某个历史快照,而加锁读和写操作读取的是最新已提交的数据。理解快照读与当前读的区别,以及它们在 READ COMMITTED(RC)与 REPEATABLE READ(RR)隔离级别下的表现,有助于分析幻读、不可重复读等问题。 隐藏列与 undo 版本链InnoDB 聚簇索引记录包含隐藏列... 背景InnoDB 通过多版本并发控制(MVCC)实现读写不互相阻塞:普通的 SELECT 读取的是数据的某个历史快照,而加锁读和写操作读取的是最新已提交的数据。理解快照读与当前读的区别,以及它们在 READ COMMITTED(RC)与 REPEATABLE READ(RR)隔离级别下的表现,有助于分析幻读、不可重复读等问题。 隐藏列与 undo 版本链InnoDB 聚簇索引记录包含隐藏列...
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签