数据库的问题通常不会提前打招呼,它在你上线那天出现。我发现自己居然没法反驳。我把这个业务的唯一性从应用层挪到了数据库层。从此我多了一条团队规约
😂 IT段子
程序员日常、代码趣事、技术梗图,让你在学习之余轻松一笑
Explain 一打,type 是 ALL,rows 是八百万,我默默关掉了工单。我把手上的资料翻出来又读了两遍。我看了下数据分布,发现这个字段的区分度只有百分之零点一。感动,然后我学到了新的一课
我把这个业务的唯一约束想清楚了,然后发现拦住了自己。我盯着屏幕沉默了十分钟。我看了下数据分布,发现这个字段的区分度只有百分之零点一。这条经验值直接拉满
数据库字段名叫 is_del,注释叫"是否删除",实际含义是"是否没删除"。我不知道该说什么,就笑了笑。我打开了这张表的自增 id 走势,发现中间有段跳号。幸好之前留了备份
我把这个查询拆成了两步,反而比原来更快。我拉了个小群,把相关同学都叫了进来。我在心里默默把这次的 SQL 变更写进了变更单,留个痕。好在最后有惊无险
Explain 一打,type 是 ALL,rows 是八百万,我默默关掉了工单。我深呼吸了一下,决定从最可疑的地方查起。我回到工位第一件事就是把备份策略重新确认了一遍。办公室安静得能听见键盘声
一条 SQL 卡了整张表,最后发现是隐式类型转换没走索引。我打开记录从头到尾扫了一遍。我打开了这两个库的表结构,发现有张表只在一个库里。这大概就是程序员的人生吧
一张表两亿行,没有分区,索引建了八个,每个查询都全表扫。我不知道该说什么,就笑了笑。我看了下数据分布,发现这个字段的区分度只有百分之零点一。复盘会上我们把它列成了案例
我把这个查询拆成了两步,反而比原来更快。我打开记录从头到尾扫了一遍。我打开了这个慢查询的采样,发现集中在两个接口上。世界瞬间清净了
一张表两亿行,没有分区,索引建了八个,每个查询都全表扫。我想了想,觉得这话没法接。我把执行计划贴出来逐行分析,最后发现是隐式转换让索引失效了。这条经验值直接拉满