MySQL技术文章
-
数据库 · MySQL | 5天前 | MySQL · JSON · SQL 查询 · 数据展开 · mysql JSON_TABLE ON EMPTY ON ERROR JSON 数组 NESTED PATH
MySQL JSON_TABLE 可以把 JSON 文档投影成关系表。本文用订单、商品和选项的嵌套数组说明根路径、NESTED PATH、FOR ORDINALITY,以及缺失字段和类型转换的处理边界。296 收藏 -
MySQL InnoDB 改用 READ COMMITTED 后,主要减少非唯一索引范围上的间隙锁与不匹配行的锁保留;普通 SELECT、锁定读、外键检查和重复键检查仍需分开判断。284 收藏 -
MySQL LOAD DATA 导入含换行文本时,要分清字段内的\n转义、CSV 引号包围的真实换行,以及记录本身的行结束符。本文按源文件形态说明 TERMINATED BY、ENCLOSED BY、ESCAPED BY 和 LOCAL 的边界,并给出导入后的核对清单。284 收藏 -
从递归终止条件、循环数据和 cte_max_recursion_depth 三个方向排查 MySQL CTE 超过默认深度的问题,并给出可回滚的保护配置。270 收藏 -
MySQL 联合索引不是把多个单列索引简单拼在一起。以 (tenant_id,status,created_at) 为例,查询跳过第一列时通常失去按该联合键直接定位的能力,但最终是否使用索引仍要看谓词、选择性、统计信息和优化器成本。本文用 EXPLAIN 给出判断方法。264 收藏 -
MySQL invisible index 可以在不立即删除索引的前提下模拟它离开优化器候选集的影响。本文用 SHOW INDEX、EXPLAIN 和 use_invisible_indexes 对比查询计划,并说明如何安全回滚。263 收藏 -
MySQL 死锁日志中的表名、索引名、锁模式和记录值需要结合事务语句才能还原到 SQL。本文用 SHOW ENGINE INNODB STATUS 与 performance_schema.data_locks 说明如何区分持有锁和等待锁,并从索引记录反推 WHERE 条件与事务顺序。261 收藏 -
从年龄计算的失败 DDL 出发,解释 MySQL 生成列的确定性要求,并对比动态查询、VIRTUAL、STORED 和生成列索引的选择。247 收藏 -
MySQL EXPLAIN 的 filtered 很低,不等于索引一定失效。本文从 rows 与 filtered 的乘积、残余条件、实际执行行数和统计信息入手,给出先查什么、何时 ANALYZE TABLE、何时再改索引的排查顺序。244 收藏 -
MySQL 用 ROW_NUMBER 取每组最新记录时,如果时间相同,必须补充唯一且符合业务的排序键;若要保留全部并列最新行,应改用 RANK。本文用订单状态示例说明两种写法和检查清单。242 收藏 -
MySQL 中同一条语句多次引用 CTE,通常只会物化一次;本文用 EXPLAIN 和 optimizer_trace 区分共享结果、自动索引与真正重复工作。237 收藏 -
MySQL 的 ROLLBACK TO SAVEPOINT 会撤销保存点后的数据修改,但不会等同于释放锁。本文区分记录锁、间隙锁和事务结束边界,并用两个会话说明如何排查回滚后的阻塞。226 收藏 -
MySQL 不可见索引适合用来评估索引替代方案:先核对候选索引和基线计划,再让优化器暂时忽略它,结合 EXPLAIN、慢查询与工作负载判断是否仍有依赖,最后决定恢复、替换还是删除。226 收藏 -
MySQL 备份恢复不能只看备份文件是否存在,还要保存并复核二进制日志文件、起始位置和停止位置。本文给出一套不依赖猜测的检查方法。216 收藏 -
MySQL 队列使用 SKIP LOCKED 时,另一个事务未提交的任务可能暂时不出现在结果集。本文解释锁定读语义,并给出短事务、租约和补偿方案。209 收藏