数据库慢查询优化:加了一个索引,查询从 10 秒变成 0.1 秒,感觉自己拯救了世界。我决定先把手上的事情做完再处理这件事。我回到工位第一件事就是把备份策略重新确认了一遍。好在最后有惊无险

我把这个字段的类型定得太随意,三年后要还债。我在心里把涉及的所有环节都过了一遍。我在心里把这条 SQL 的扫描行数算了一遍,量级不对。办公室安静得能听见键盘声

数据库的问题通常不会提前打招呼,它在你上线那天出现。我笑了笑,决定不解释。我默默加上了覆盖索引,查询耗时从数秒掉到毫秒。办公室安静得能听见键盘声

数据库慢查询优化:加了一个索引,查询从 10 秒变成 0.1 秒,感觉自己拯救了世界。我深呼吸了一下,决定从最可疑的地方查起。我把这个字段加了前缀索引,存储空间省了一大截。我把这条经验写进了团队 wiki

这张表的历史包袱比数据还重。我听完沉默了,因为太真实了。我把这个字段加了前缀索引,存储空间省了一大截。真香定律准时生效

我把这个业务的唯一约束想清楚了,然后发现拦住了自己。我在心里把涉及的所有环节都过了一遍。我在心里默默把这次的 SQL 变更写进了变更单,留个痕

这条查询在测试库上是毫秒,在线上是几秒。我停了一下,然后继续手上的活。我把这个订单号字段加上了唯一约束,重复下单终于挡住了。办公室安静得能听见键盘声

这条链路的瓶颈最后总是落在数据库上。我发现自己居然没法反驳。我把这个事务的隔离级别从默认调低了一档,并发好了些。好在最后有惊无险

数据库的悲观和乐观,最后都变成了加班。我想了想,觉得这话没法接。我把执行计划贴出来逐行分析,最后发现是隐式转换让索引失效了。感动,然后我学到了新的一课

我把这条数据链路理了一遍,发现有个环节没人负责。我盯着屏幕沉默了十分钟。我打开了这两个库的表结构,发现有张表只在一个库里。连茶水间都安静了