MySQL技术文章
-
JSON_SET 只是 MySQL JSON partial update 的候选入口;同列读写、已有路径、替换值空间和 JSON 列类型任一条件不满足,都可能退回完整更新。本文还区分 JSON_STORAGE_FREE 与 row-based binlog 的 PARTIAL_JSON。192 收藏 -
MySQL 命名窗口在同一查询块内复用分区、排序与帧规则,不是跨独立查询的持久对象。通过完整样本说明 WINDOW、OVER、窗口扩展及多报表共享口径的边界。226 收藏 -
MySQL JSON_MERGE_PATCH 按 RFC 7396 合并 JSON 对象。要删除目标对象中的成员,应在第二个 JSON 对象中把同名键设为 JSON null;对象递归合并,非 null 值会替换旧值。287 收藏 -
从并列排序值、默认 frame 和显式边界入手,说明 MySQL window frame 中 ROWS 与 RANGE 的区别,并给出逐笔累计、按日期累计和范围统计的选择方法。308 收藏 -
MySQL 用 ROW_NUMBER 取每组最新记录时,关键不是只写一个倒序,而是先用 PARTITION BY 划分分组,再用稳定的 ORDER BY 排名,最后在外层筛选 rn=1。本文还说明并列时间戳、过滤条件和 RANK 选择等边界。123 收藏 -
MySQL invisible unique index 只改变默认优化器是否纳入索引,不会停止索引维护或关闭唯一约束。本文用重复写入、EXPLAIN、IS_VISIBLE 和隐式主键例外说明不可见索引的真实边界。335 收藏 -
MySQL 8.4 可用 SET_VAR 临时启用不可见索引候选,无需改变索引可见性。本文说明单语句写法、会话原值恢复、连接池风险,以及允许候选不等于强制选中。345 收藏 -
MySQL generated column 索引不是按数学等价判断的。本文用 f1 + 1、操作数顺序、结果类型和 JSON_UNQUOTE 说明匹配失败的原因,并给出 EXPLAIN 排查方法。304 收藏 -
MySQL 时间范围查询没有用上索引,通常要从时间列是否被函数包裹、EXPLAIN 计划、复合索引顺序和优化器成本判断。本文用 DATETIME 半开区间给出排查与修复方法。139 收藏 -
MySQL 大表使用 LIMIT offset, size 翻到后页时,会先扫描并丢弃大量记录。本文用稳定排序、联合索引和 keyset pagination 改造查询,并说明倒序、重复时间戳和末页的处理方式。490 收藏 -
MySQL 的 UPDATE 和 DELETE 也可以先用 EXPLAIN 观察读取路径。本文从 type、key、rows、filtered 和 JSON 计划入手,说明怎样识别全表扫描、估算偏差与写入前的范围风险。343 收藏 -
MySQL 递归 CTE 的层级停止条件应写在递归成员的 WHERE 中,用 depth 控制下一层是否生成,再用递归深度和执行时间限制兜底。392 收藏 -
MySQL EXPLAIN 的 rows 是优化器估算值,不等于实际扫描量。本文用 EXPLAIN ANALYZE 对照 actual rows、loops 和耗时,再通过 ANALYZE TABLE、直方图与索引检查定位偏差。419 收藏 -
MySQL CTE 可以把复杂筛选或聚合子查询命名后重复引用,本文用订单统计场景说明 WITH 的组织方式、列名与作用域边界,以及合并和物化对执行计划的影响。150 收藏 -
Using filesort 只说明 MySQL 需要额外排序,不等于一定要加索引。本文从 EXPLAIN 的 rows、LIMIT、排序字段、索引覆盖和 Sort_merge_passes 入手,给出判断是否需要优化的顺序。438 收藏