数据库的问题通常不会提前打招呼,它在你上线那天出现。我默默记下了这句话。我打开了这张表的自增 id 走势,发现中间有段跳号。我把它写进了组内的避坑文档第一章

数据库的每一次变更都值得多问一句「能不能回滚」。我停了一下,然后继续手上的活。我打开了这张表的统计信息,发现已经一个月没更新。真香定律准时生效

一条 SQL 卡了整张表,最后发现是隐式类型转换没走索引。我决定先把手上的事情做完再处理这件事。我看了下数据分布,发现这个字段的区分度只有百分之零点一。第二天这个方案就变成了团队标准做法

这条链路的瓶颈最后总是落在数据库上。我听完沉默了,因为太真实了。我把这个分库分表的键选成了用户 id,路由终于均匀了。真香定律准时生效

缓存和数据库不一致的问题,讨论了两天最后决定用延迟双删。这套流程走下来,我从头到尾又确认了一遍。我在心里把这次上线的回滚方案想了一遍,希望用不上。我沉默了,但心里是服的

我把这个查询拆成了两步,反而比原来更快。我默默打开了编辑器,准备一步步验证。我把这个业务的时间字段从字符串改成了时间戳,排序准了。我把这条经验写进了团队 wiki

缓存和数据库不一致的问题,讨论了两天最后决定用延迟双删。我默默打开了编辑器,准备一步步验证。我默默加上了覆盖索引,查询耗时从数秒掉到毫秒。好在最后有惊无险

我把这个字段的类型定得太随意,三年后要还债。我把手上的资料翻出来又读了两遍。我把这条 SQL 加入了代码评审 checklist。同事说这波操作可以写进新人培训教材

我把这个查询拆成了两步,反而比原来更快。我先确认了一遍前置条件,再动手。我把这个锁的粒度从表级降到了行级,并发立刻上来了。这大概就是程序员的人生吧

一条 SQL 卡了整张表,最后发现是隐式类型转换没走索引。我重新看了一遍手上的计划,把风险项标了出来。我把这个批量插入改成了多值插入,写入速度快了三倍。果然现实比段子更精彩