看见世界
数据库:一次只钻一块
不按「索引优化 / 事务 / 调优」这么切 —— 那种题的底牌只能写成「注意选择率、注意锁」。这里切的是联合索引的列顺序、一条 UPDATE 到底锁了什么、OFFSET 那一步做了什么,一份钻一块。
怎么用
这一批是学习型的:它会引导你,不会追到你说不出话为止。卡住时它先问你卡在哪一层(没听过 / 知道但不明白为什么 / 明白但用不上),再决定给什么;同一个点引导两次还不通才直接讲,讲完要你用自己的话复述一遍。
默认按 MySQL / InnoDB 讲 —— 这块的坑有一半是实现细节,聚簇索引、回表、间隙锁在别家不是这么回事。用 PostgreSQL 或者别家的照样能练,只要在第一句话里说一声,它会按你那家讲,并在结论不同的地方点出来。
怎么开始
- 挑一份,点开它,把提示词复制走。
- 新开一个空对话贴进去,第一句话先说你用的是哪家、哪个版本(不说就按 MySQL 8 讲)。
- 然后什么都别说,等它问第一个问题。
中途随时能喊的四个口令
跳过立刻进下一幕换个说法这一处换个角度再讲一遍直说吧讲完整答案,然后要我复述复盘立刻跳到收尾,输出复盘卡片
三条坑
- 末尾的底牌别自己先读 —— 那一栏「常见的想错」写的就是每一问的答案。
- 准备好被追数字。「快一些」「省了 IO」会被当场打断:几行?几次?几倍?说得出结论说不出数字,就是背的。
- 它开始夸你的时候,提醒它看「不许夸我」那条。引导不等于哄。
先做「联合索引的顺序」,它是这批的地基 —— 后面「锁加在索引记录上」「扫描行数为什么这么大」都要用到那句「叶子上是字典序」。线上正被并发问题咬着的,从「先查再改」开始;查询慢的,从「读了多少行」开始。
事务与锁
隔离级别各挡住了什么
RR 下读到余额 100,然后 UPDATE balance = balance - 10 —— 扣完是多少?
一条 UPDATE 锁了什么
UPDATE ... WHERE 一个没索引的列 —— 这时候「行锁」还是行锁吗?
先查再改,为什么会丢
「包进事务里不就行了」——事务到底挡住了什么?