MySQL技术文章
-
EXPLAIN 里的 rows 只是优化器估算要扫描的索引记录数,不等于最终访问数据页的成本。本文用订单列表查询拆开回表、覆盖索引和分页取数的关系,并给出可复现的验收方法。475 收藏 -
一个订单列表翻到很后面后明显变慢,问题通常不只在 LIMIT,而在于数据库仍要跳过大量记录并回表。本文用游标式分页、稳定排序和覆盖索引改造一个列表接口,并用 EXPLAIN 核对执行路径。475 收藏 -
旧表启用 MySQL CHECK 约束前,先用反向查询找出历史违规数据,按业务规则分批修复或隔离,再以 NOT ENFORCED 暂存命名约束,确认全表通过后切换为 ENFORCED。475 收藏 -
MySQL WITH RECURSIVE 查询层级数据时,真正需要防的是环路和无界展开。本文用组织架构示例拆开终止条件、递归深度上限、路径去重和结果核对。472 收藏 -
MySQL GROUP_CONCAT 结果被截断时,先检查 group_concat_max_len,再按会话、全局和持久配置选择修复方式,并排除字节长度、排序、NULL 与 max_allowed_packet 等边界问题。470 收藏 -
MySQL 主从延迟不能只看 Seconds_Behind_Master。本文从复制线程状态、Relay_Log_Pos、Performance Schema 事务等待和大事务四个层次排查,并给出可回退的处理顺序。468 收藏 -
MySQL 死锁日志最先要找的是等待事务和阻塞事务。本文从 LATEST DETECTED DEADLOCK 读出两端关系,再用 data_lock_waits 关联事务、线程、表和 SQL,最后说明锁顺序、索引与安全重试的修复重点。467 收藏 -
用MySQL窗口函数按分组生成稳定名次,再通过CTE或派生表筛选每组前N条,并说明ROW_NUMBER、RANK、DENSE_RANK的并列边界。465 收藏 -
MySQL JSON 多值索引适合优化数组成员筛选,但不能替代排序索引。本文用 MEMBER OF()、EXPLAIN 和生成列说明可用范围。463 收藏 -
用 INFORMATION_SCHEMA.INNODB_TRX 找出当前 InnoDB 事务,按 TRX_STARTED 判断持续时间,再用 TRX_MYSQL_THREAD_ID 映射到连接,避免把只读会话、锁等待和已结束事务混为一谈。461 收藏 -
MySQL 分区表清理历史数据时,DROP PARTITION 为什么通常比逐行 DELETE 更快?本文从分区边界、索引与日志工作粒度解释差异,并给出执行前后的核对清单。461 收藏 -
删除父表记录时突然变慢,先别急着改事务隔离级别。本文从锁等待、子表外键索引和级联删除三个现场信号入手,给出可复现的检查 SQL、修复顺序与回滚边界。458 收藏 -
删除一条订单主表记录时,如果外键触发级联检查,耗时可能来自子表扫描、级联删除和锁等待。本文用 InnoDB 示例拆开索引与锁范围。457 收藏 -
联合索引遇到中间列范围条件后,后列通常不能继续缩小同一个连续扫描区间。本文用键组顺序和 EXPLAIN 说明原因,并给出索引重排判断清单。454 收藏 -
MySQL 事件已经创建却没有按时执行,通常要分开核对全局调度器、事件自身状态、创建时区和 DEFINER 权限。本文用一个可复查的小项目演示排查顺序,并补上重复触发与错误日志边界。452 收藏