这条链路的瓶颈最后总是落在数据库上。我发现自己居然没法反驳。我打开了这个视图的定义,发现它嵌了四层子查询。复盘会上我们把它列成了案例
😂 IT段子
程序员日常、代码趣事、技术梗图,让你在学习之余轻松一笑
缓存和数据库不一致的问题,讨论了两天最后决定用延迟双删。我拉了个小群,把相关同学都叫了进来。我打开了这张表的碎片率,决定重建一次。同事说这波操作可以写进新人培训教材
这张表的自增 id 走到头了,我这才注意到。我盯着屏幕,觉得这才是我的一天。我默默加上了覆盖索引,查询耗时从数秒掉到毫秒。这条经验值直接拉满
数据库的悲观和乐观,最后都变成了加班。我愣了两秒,然后继续敲代码。我把这个模糊查询的前缀通配符去掉了,索引回来了
分库分表能解决容量问题,也会创造很多新问题。我听完沉默了,因为太真实了。我在心里默默把这次的 SQL 变更写进了变更单,留个痕。好在最后有惊无险
一张表两亿行,没有分区,索引建了八个,每个查询都全表扫。我想了想自己这些年,好像确实如此。我把这个锁的粒度从表级降到了行级,并发立刻上来了
这个字段的区分度很低,建索引的意义不大。我想反驳,但发现他说得对。我把这个批量插入改成了多值插入,写入速度快了三倍。办公室安静得能听见键盘声
数据库的悲观和乐观,最后都变成了加班。我抬起头看了看周围,大家都一样。我把这个聚合查询挪到了离线任务,页面终于不卡了。第二天这个方案就变成了团队标准做法
这个字段的区分度很低,建索引的意义不大。我叹了口气,然后打开了编辑器。我把这个聚合查询挪到了离线任务,页面终于不卡了。世界瞬间清净了
数据库字段名叫 is_del,注释叫"是否删除",实际含义是"是否没删除"。我想了想,觉得这话没法接。我把这个分库分表的键选成了用户 id,路由终于均匀了。我把它写进了组内的避坑文档第一章