MySQL 笔记:utf8 与 utf8mb4 的坑,emoji 与排序规则
MySQL 的 utf8 实际是最多三字节的 utf8mb3,存不下 emoji。笔记梳理字符集在服务器、库、表、列、连接五层的优先级,索引长度 767 与 3072 字节的由来,以及常见报错的定位方式。
MySQL 的 utf8 实际是最多三字节的 utf8mb3,存不下 emoji。笔记梳理字符集在服务器、库、表、列、连接五层的优先级,索引长度 767 与 3072 字节的由来,以及常见报错的定位方式。
拆解主从复制的三个线程与两段日志接力,说明位点与 GTID 的差异,再对比 STATEMENT、ROW、MIXED 三种 binlog 格式的取舍,并列出双一、只读、延迟从库等常见配套配置。
说清 Using filesort 的真实含义与两种排序算法,列出 5.7 里能靠索引免排序的几种条件组合,给出排序缓冲区相关参数和排序失效的常见写法。
从语义上分清三种 count 的计数规则,解释 InnoDB 为什么不缓存精确总行数,并用本机实测的 EXPLAIN 说明 count(*) 会挑一个更小的二级索引扫描,最后给出统计总数的几种优化路线。
解释 OFFSET 分页为什么越翻越慢:引擎要取出并丢弃前十万行再回表,然后给出延迟关联、游标翻页、覆盖索引和业务侧限制四种常见解法及各自的适用边界。
梳理 InnoDB 的记录锁、间隙锁与 next-key 锁分别在什么条件下加,元数据锁为什么会让一条 ALTER 卡住整张表,并给出死锁与锁等待的排查步骤、常用系统表和几种降低死锁概率的写法。
按实现方式讲 ACID 四个特性各自靠什么保障,梳理四种隔离级别对应的读异常,并用 undo 版本链和 ReadView 说明快照读与当前读的区别,以及 InnoDB 默认级别如何防幻读。
从事务、锁粒度、索引结构、崩溃恢复和 count 统计五个维度对比 InnoDB 与 MyISAM,说明为什么 5.7 之后默认引擎是 InnoDB,以及还有哪些场景值得考虑 MyISAM。
记录慢查询日志的开关与阈值配置、动态生效的注意事项,以及从采集、聚合排序到逐条看执行计划的完整定位流程,附 mysqldumpslow 与 performance_schema 两种聚合入口。
逐列拆解 EXPLAIN 的输出:type 的访问等级从 const 到 ALL,key 和 possible_keys 的差别,key_len 判断索引实际用了几列,rows 只是估算值,以及 Extra 里 Using index、Using filesort 这些信号的含义。