MySQL技术文章
-
MySQL 给大表加索引时,ALGORITHM 和 LOCK 决定了变更方式与并发影响。本文用 ALTER TABLE 说明如何预判支持范围、处理元数据锁,并在上线前做可回退的核对。264 收藏 -
MySQL 联合索引不是把多个单列索引简单拼在一起。以 (tenant_id,status,created_at) 为例,查询跳过第一列时通常失去按该联合键直接定位的能力,但最终是否使用索引仍要看谓词、选择性、统计信息和优化器成本。本文用 EXPLAIN 给出判断方法。264 收藏 -
MySQL invisible index 可以在不立即删除索引的前提下模拟它离开优化器候选集的影响。本文用 SHOW INDEX、EXPLAIN 和 use_invisible_indexes 对比查询计划,并说明如何安全回滚。263 收藏 -
MySQL UPDATE JOIN 不是写上 JOIN 就只会改一行,关联表存在重复键时,同一目标记录可能被多条源记录命中。本文用订单与客户标签的修复场景,演示先用 SELECT 验证关联唯一性,再在事务和影响行数检查下执行更新。262 收藏 -
订单清理任务执行 DELETE 时,真正拖慢速度的可能不是主表扫描,而是子表外键检查、级联删除和长事务锁范围。本文用订单与明细表的场景拆开执行路径,给出索引核对、分批删除和安全验收方法。262 收藏 -
数据库 · MySQL | 1个月前 | MySQL · 执行计划 · 慢查询 · MySQL EXPLAIN ANALYZE MySQL估算行数实际行数 MySQL执行计划耗时 MySQL慢查询诊断 MySQL TREE执行计划
从 EXPLAIN 基线到 EXPLAIN ANALYZE 实测,按节点对比估算行数、实际行数、迭代耗时和 loops,定位统计信息与访问路径偏差。262 收藏 -
MySQL 用 BINARY(16) 存 UUID 可以减少存储空间,但 UUID_TO_BIN 的 swap_flag 必须和 BIN_TO_UUID 使用同一约定。本文用真实 SQL 输出对比原始顺序、交换时间段和错误还原,说明版本 1 UUID 的适用边界。261 收藏 -
MySQL 死锁日志中的表名、索引名、锁模式和记录值需要结合事务语句才能还原到 SQL。本文用 SHOW ENGINE INNODB STATUS 与 performance_schema.data_locks 说明如何区分持有锁和等待锁,并从索引记录反推 WHERE 条件与事务顺序。261 收藏 -
MySQL JSON_OVERLAPS 可以配合 InnoDB 多值索引优化 JSON 数组相交查询,但必须匹配索引表达式、数组类型和查询路径,并用 EXPLAIN 确认优化器实际选用了索引。255 收藏 -
MySQL 复制延迟排查不能只看 Seconds_Behind_Source。本文用 SHOW REPLICA STATUS 对照 IO 接收线程和 SQL 应用线程,区分网络接收慢、中继日志堆积与应用报错。254 收藏 -
MySQL 8.4 的 CTE 不一定会生成临时结果集。本文用 EXPLAIN 和 optimizer_switch 判断 CTE 是被合并还是物化,并说明 derived_merge、NO_MERGE 与多次引用的边界。253 收藏 -
MySQL LOAD DATA 导入 TSV 时,字段内制表符要靠引号边界或反斜杠转义表达;本文给出两种写法,并用 HEX、CHAR(9) 和 SHOW WARNINGS 验证结果。253 收藏 -
数据库 · MySQL | 1星期前 | MySQL · 事务 · InnoDB · 锁定读 MySQL NOWAIT FOR UPDATE NOWAIT FOR SHARE NOWAIT InnoDB行锁 ERROR 3572
MySQL 锁定读默认会等待冲突行锁,追加 NOWAIT 后可立即返回 3572 错误。本文用双连接示例说明 FOR UPDATE NOWAIT 的写法、事务回滚、错误处理,以及它与默认等待和 SKIP LOCKED 的边界。253 收藏 -
MySQL 的普通派生表不能引用同一 FROM 子句里的前置表;在派生表前加 LATERAL,并把被引用表放在左侧,就能为每个外层行计算相关结果。252 收藏 -
用一组混合 JSON 数据拆开 JSON_TABLE 的缺失路径、类型转换、默认值与报错边界,给出可直接改写的 SQL 配置方法。251 收藏