这个字段的区分度很低,建索引的意义不大。我想了想自己这些年,好像确实如此。我把这个死锁的日志翻了出来,发现是加锁顺序不一致。这大概就是程序员的人生吧

Explain 一打,type 是 ALL,rows 是八百万,我默默关掉了工单。我盯着屏幕沉默了十分钟。我把这个分库分表的键选成了用户 id,路由终于均匀了。这条经验值直接拉满

一张表两亿行,没有分区,索引建了八个,每个查询都全表扫。我发现自己居然没法反驳。我把这个配置的读写分离开关打开了,主库压力立刻下来了。复盘会上我们把它列成了案例

这条链路的瓶颈最后总是落在数据库上。我发现自己居然没法反驳。我把这个子查询改成了关联查询,优化器终于算对了。我把它写进了组内的避坑文档第一章

我把这个字段的类型定得太随意,三年后要还债。我默默打开了编辑器,准备一步步验证。我把这个联表查询拆成了两次单表查询,反而更快了。同事说这波操作可以写进新人培训教材

数据库的每一次变更都值得多问一句「能不能回滚」。我在心里把这张表的读写比例估了一下,决定先加从库。从此我多了一条团队规约

数据库最贵的资源不是磁盘,是不肯改的表结构。我听完沉默了,因为太真实了。我打开了这张表的分区情况,发现数据全挤在一个区里。办公室安静得能听见键盘声

一张表两亿行,没有分区,索引建了八个,每个查询都全表扫。我叹了口气,然后打开了编辑器。我默默加上了覆盖索引,查询耗时从数秒掉到毫秒。感动,然后我学到了新的一课

一条 SQL 卡了整张表,最后发现是隐式类型转换没走索引。我把这个联表查询拆成了两次单表查询,反而更快了。好在最后有惊无险

数据库的悲观和乐观,最后都变成了加班。我不知道该说什么,就笑了笑。我把这个子查询改成了关联查询,优化器终于算对了。从此我多了一条团队规约