InnoDB 全表扫描和全主键扫描一样吗?
InnoDB 表的主键索引包含了表中所有数据,全表扫描和全主键扫描还会有什么不一样吗?
my.cnf 增加一个配置项,MySQL 不能启动了
官方文档里明明有 foreign_key_checks 系统变量,在 my.cnf 中增加这个系统变量之后,MySQL 就启动不了了,这是为什么呢?
MySQL 自适应哈希索引(一)构造
评估扫描区间覆盖的记录数量、查询执行阶段定位扫描区间的第一条记录、插入记录定位插入目标位置时,自适应哈希索引(AHI)都可以提升定位记录的效率,本文是 AHI 系列的第 1 文章篇,介绍 AHI 的构造流程。
explain 显示 count(*) 使用了索引,实际却是全表扫描
本文介绍了 8.0.32 中的 count(*) 相比于 5.7.35 中的变化。
为什么需要插入意向锁?
InnoDB 有意向锁和插入意向锁,你会把这两种锁搞混吗?通过这篇文章来了解下插入意向锁吧。
information_schema.tables 视图中,表的最后修改时间靠谱吗?
information_schema.tables 视图的 update_time 字段记录了表的最后修改时间,本文介绍了 update_time 从哪里来,到哪里去,以及为什么不靠谱。
答读者问:唯一索引冲突,为什么主键的 supremum 记录会加 next-key 锁?
插入一条记录,导致唯一索引冲突,为什么会对主键的 supremum 记录加 next-key 排他锁?
慢查询日志中的 Lock_time 从哪里来?
聊聊 Lock_time 是谁,从哪里来,要到哪里去(实际上去处已定,不用聊)。
带你读 MySQL 源码:where 条件怎么过滤记录?
源码分析系列文章的第 3 篇,介绍了 SQL where 条件中包含 and、or 的实现逻辑。
带你读 MySQL 源码:limit, offset
带你读 MySQL 源码系列文章第 1 篇,介绍 MySQL limit, offset 源码实现。
MySQL 客户端不辞而别,服务端怎么办?
MySQL 客户端断开连接后,之前发送给服务端执行的 SQL,执行结果是成功还是失败?
MySQL 客户端 Ctrl + C,服务端会发生什么?
本文介绍了客户端给 MySQL 发送一条 SQL 之后,SQL 执行完成之前,客户端 Ctrl + C 时会干什么?接下来服务端又会发生什么?
MySQL 调试环境搭建:VSCode + Docker
本文介绍了 VSCode + Docker + CentOS 7.9 搭建 MySQL 调试环境的完整流程。
修改 lower_case_table_names 导致 frm 文件删除失败
本文分析了 MySQL 删除数据的主要逻辑,介绍了 lower_case_table_names 的不同枚举值对于数据库名、表名的影响,以线上修改 lower_case_table_names 导致 frm 删除失败的具体原因。
MySQL 相关子查询
本文主要介绍了不相关子查询转换为相关子查询之后,explain 结果中子查询 type、ref 列的显示逻辑,物化和相关子查询两种执行策略的成本计算,以及简单介绍了相关子查询的执行流程。
MySQL 全表扫描成本计算
本文介绍全表扫描成本计算的逻辑。
MySQL 不相关子查询怎么执行?
子查询系列正式的第一篇文章,介绍不相关子查询的逻辑,以及写这类 SQL 时最佳实践。
where field in(...) 是怎么执行的?
本文介绍不包含子查询的 in 条件,判断和记录是否匹配的两种方式,以及需要进行的准备工作。
MySQL 连接怎么保活?
本文介绍了数据库连接保活的原理和 2 种保活方式,以及对比了这 2 种保活方式的执行效率。
MySQL 8.0 数据字典表
MySQL 8.0 对数据字典进行了重构,最重要的改变就是数据字典表被 InnoDB 大一统了,由此带来的好处就是 DDL 不会半途而废变成四不像了。