MySQL技术文章
-
用 RANGE COLUMNS 按月份组织 MySQL 分区表,先核对分区边界,再安全删除越过保留线的历史分区,并处理 MAXVALUE 分区的滚动维护。327 收藏 -
sys.schema_unused_indexes 只能说明当前统计周期没有记录到索引事件,不能直接等同于业务永远不使用。本文给出从观察周期、业务 SQL、执行计划到 invisible index 灰度验证的安全删除流程。327 收藏 -
MySQL 8.4 的 CHECK 约束已经可以真正拦截不满足条件的写入,但约束状态、NULL 三值逻辑和隐式转换会让排查结果与直觉不同。本文用可复现实验核对约束定义、失败写入和历史脏数据清理边界。326 收藏 -
解释 MySQL JSON 数组普通索引失效的原因,说明 CAST AS ARRAY 多值索引、三类可优化谓词、类型一致性及覆盖索引和空数组限制。326 收藏 -
MySQL 字符串比较结果异常时,按连接、列和表达式三层定位 collation,再用查询级 COLLATE 或列级配置完成修复。326 收藏 -
解释 MySQL 外键 ON DELETE SET NULL 为什么要求子表外键列允许 NULL,并用父子表示例、建表语句和动作对比说明如何选择 SET NULL、CASCADE 与 RESTRICT。325 收藏 -
用 mysqldump 的一致性读、备份时点 GTID 和副本状态联合确认 InnoDB 在线备份的快照边界,解释为什么 Seconds_Behind_Source 不能单独证明备份一致。323 收藏 -
MySQL EXPLAIN ANALYZE 会把优化器估算的成本与行数,和执行时的实际耗时、实际行数、循环次数放在同一棵执行树里。本文用订单查询的偏差案例,演示如何读 actual time、rows、loops,判断统计信息、索引选择和数据分布问题,并给出慢查询定位与回归检查方法。321 收藏 -
用 performance_schema.data_lock_waits 连接等待锁与持有锁,再回到 data_locks 和线程事件核对对象、事务和处理顺序,避免只看到一个线程就误判。312 收藏 -
使用 MySQL ROW_NUMBER() 按业务键分组、按更新时间倒序取每组最新记录,并处理并列时间、NULL 和索引等常见边界。312 收藏 -
MySQL UPDATE 条件看起来只命中少量数据,却出现大范围锁等待时,按执行计划、data_locks、范围锁和事务边界逐层定位,避免盲目改隔离级别。311 收藏 -
MySQL 连接池空闲连接被 wait_timeout 或中间网络设备断开后,不要只靠重试。本文从服务端超时、连接池回收、PingContext 和事务安全四个层面给出恢复方案。311 收藏 -
MySQL 分区表建好后查询仍然很慢,往往不是分区失效,而是条件没有触发分区裁剪。本文用按月订单表拆解 EXPLAIN PARTITIONS、范围条件和分区键改写的验证方法。310 收藏 -
数据库 · MySQL | 3星期前 | MySQL · 执行计划 · 索引优化 · 数据库排查 · mysql 不可见索引 Invisible Index optimizer_switch 索引回归
MySQL 的不可见索引适合用来观察“去掉这条索引会怎样”,但它不是删除前的自动回滚按钮。本文以订单查询为例,演示设置不可见、用 optimizer_switch 做单会话影子验证、检查执行计划和恢复可见性的边界。308 收藏 -
MySQL 切换事务隔离级别后查询结果仍不变,通常是当前事务已经建立了快照,或切换只作用于下一事务。本文用两个会话说明 REPEATABLE READ、READ COMMITTED、自动提交和锁定读的边界。307 收藏