标签频道
慢查询治理
该标签下的文章、提问与讨论帖。
«结论先行:"utf8mb4_general_ci" 和 "utf8mb4_0900_ai_ci" 都是「utf8mb4」,但它们是两套不同的比较规则(collation)。跨库 JOIN 时 collation 不一致,要么直接报 "Il
背景 我在维护一套 MySQL 8.0.32 的订单系统,核心报表查询里大量使用 CTE(WITH ... AS)来组织多表关联逻辑。最近遇到一个反复出现的执行计划漂移问题,想请教社区有实际经验的 DBA。 现象 一条典型 SQL 结构如下
«结论先行:分区表不是"大表救星",而是一笔用"跨分区查询更慢 + 唯一键受限 + 每月必维护"去换"分区裁剪快 + 删历史秒级"的交易。该不该做,取决于你的读写是否天然按时间切分。下面是一次真实的改造复盘,把收益和代价都摆到明面上算账。»
【背景】 我负责一张 800 万行的订单宽表(InnoDB, MySQL 8.0.32),带 6 个二级索引。业务上每天约 30% 的行会被批量 UPDATE status 字段,持续一个月后观察到查询性能明显退化。 【现象】 1. SHO
一、现象:一条 2ms 的权限校验,突然飙到 103ms 去年 Q4 给一套电商后台做慢查询巡检。核心链路是「登录用户 → 拉菜单列表」,SQL 长这样: SELECT m.menu_id, m.menu_name, m.parent_id
«结论先行:深分页慢的根因不是「数据多」,而是 MySQL 优化器对 "ORDER BY … LIMIT m,n" 的处理策略——它必须把排序结果完整物化(或走排序索引顺序扫描)到第 m+n 行才肯截断,前 m 行的扫描成本是纯浪费。把「页
一、现象:一条"看起来很简单"的查询,P99 卡在 1.8s 去年我们迁移订单中心到 MySQL 8.0.32,主表 "orders" 约 2.1 亿行,单表 190GB。客服后台有一个高频接口:查某用户最近的 20 条订单: SELECT
«结论先行:索引没变、SQL 没变、buffer pool 命中率也没掉,但 P99 还是从 15ms 飙到了 3.4s——根因是 InnoDB 的统计信息(cardinality)在数据批量写入后严重失真,优化器据此选错了索引/访问路径。