MySQL技术文章
-
MySQL 联合索引不是把多个单列索引简单拼在一起。以 (tenant_id,status,created_at) 为例,查询跳过第一列时通常失去按该联合键直接定位的能力,但最终是否使用索引仍要看谓词、选择性、统计信息和优化器成本。本文用 EXPLAIN 给出判断方法。264 收藏 -
MySQL InnoDB 默认 REPEATABLE READ 下,普通 SELECT 读取的是事务快照。本文用两个会话说明新提交为何暂时不可见,以及如何选择 COMMIT、READ COMMITTED 或 FOR SHARE。385 收藏 -
用 EXPLAIN 判断索引选择问题,比较 USE INDEX、FORCE INDEX 与 MySQL optimizer hint 的作用范围、风险和验证方式。478 收藏 -
MySQL EXPLAIN FORMAT=JSON 的嵌套循环成本要结合 nested_loop、rows_examined_per_scan、rows_produced_per_join 和 cost_info.prefix_cost 阅读。本文用一条 JOIN 示例说明如何找出成本被放大的连接分支,并区分优化器估算与实际耗时。166 收藏 -
MySQL 按业务时区统计日期时,不能先对 UTC 时间取 DATE 再转换。本文用 CONVERT_TZ 处理跨午夜记录,并说明半开区间、命名时区表和 NULL 排查方法。168 收藏 -
MySQL JOIN 报 Illegal mix of collations 时,先核对两列的字符集和排序规则,再用查询级 COLLATE 临时恢复,最后统一字段定义并检查索引与匹配语义。446 收藏 -
MySQL 递归 CTE 的列类型只由非递归锚点推断。生成日期序列时显式 CAST 为 DATE,并把格式化文本移到 CTE 外部,可避免截断和严格模式报错。104 收藏 -
MySQL 递归 CTE 遍历树数据时,应在路径中记录已访问节点,用 FIND_IN_SET 排除重复引用,再用深度、递归层数和执行时间限制兜底,避免脏数据造成无限循环。142 收藏 -
MySQL invisible index 可以在不删除索引的情况下观察优化器计划变化。本文用 IS_VISIBLE、EXPLAIN、ALTER INDEX 和 SET_VAR 说明如何安全评估索引下线影响。300 收藏 -
MySQL 生成列索引不生效,通常不是索引语法错,而是查询表达式没有与生成列定义完全匹配。本文按表达式、结果类型、JSON_UNQUOTE 和 EXPLAIN 四个方向排查。300 收藏 -
MySQL 用 SUM OVER 计算累计值时,如果希望每个月重新开始,关键不是给 SUM 加条件,而是把包含年份的月份键放进 PARTITION BY,并用稳定的时间与主键排序。本文给出可直接改写的 SQL 和排查清单。380 收藏 -
MySQL 用 ROW_NUMBER 取每组最新记录时,如果时间相同,必须补充唯一且符合业务的排序键;若要保留全部并列最新行,应改用 RANK。本文用订单状态示例说明两种写法和检查清单。242 收藏 -
MySQL JSON_VALUE 对缺少路径和 JSON null 都可能返回 SQL NULL。本文用 JSON_CONTAINS_PATH、JSON_TYPE 和 ON EMPTY 哨兵值区分路径缺失、JSON null、空字符串与 SQL NULL 文档。170 收藏 -
MySQL JSON_TABLE 用 FOR ORDINALITY 为展开后的数组元素生成从 1 开始的序号。本文说明一基与零基位置、嵌套数组中的父子序号,以及先展开后过滤和路径筛选对原始位置的影响。139 收藏 -
MySQL 复制延迟排查先区分 IO 接收线程和 SQL 应用线程,再结合读取位点、执行位点、relay log 积压及 Last_IO_Error、Last_SQL_Error 判断问题落点。304 收藏