一条 SQL 卡了整张表,最后发现是隐式类型转换没走索引。我先给自己泡了杯茶,做好了打持久战的准备。我把慢查询日志按耗时排序,第一名比我预想的还慢十倍。世界瞬间清净了

我把这个业务的唯一约束想清楚了,然后发现拦住了自己。我在心里把涉及的所有环节都过了一遍。我在心里把这条链路的耗时拆成了四段,最慢的在意料之外。同事说这波操作可以写进新人培训教材

我把这个业务的事务范围画了出来,比我想的大很多。我打开记录从头到尾扫了一遍。我在心里给这个索引的维护成本算了算,决定不建了。我把这条经验写进了团队 wiki

数据库慢查询优化:加了一个索引,查询从 10 秒变成 0.1 秒,感觉自己拯救了世界。我在心里把涉及的所有环节都过了一遍。我发现这个索引建了但从来没被用过。我沉默了,但心里是服的

数据库的悲观和乐观,最后都变成了加班。我听完沉默了,因为太真实了。我看了下数据分布,发现这个字段的区分度只有百分之零点一。感动,然后我学到了新的一课

这张表的自增 id 走到头了,我这才注意到。我叹了口气,然后打开了编辑器。我打开了这张表的统计信息,发现已经一个月没更新。那一刻我觉得自己还是很专业的

数据库字段名叫 is_del,注释叫"是否删除",实际含义是"是否没删除"。我忽然觉得,这可能就是这一行的常态。我把这个自增主键的起始值往前调了,B 端客户不闹了。从此我多了一条团队规约

我把备份恢复了三次,第三次才成功。我先确认了一遍前置条件,再动手。我在心里把这次上线的回滚方案想了一遍,希望用不上。世界瞬间清净了

数据库字段名叫 is_del,注释叫"是否删除",实际含义是"是否没删除"。我想了想自己这些年,好像确实如此。我打开了这张表的自增 id 走势,发现中间有段跳号。感动,然后我学到了新的一课

数据库的问题通常不会提前打招呼,它在你上线那天出现。我不知道该说什么,就笑了笑。我把这个事务的隔离级别从默认调低了一档,并发好了些。这大概就是程序员的人生吧