问题表有 50w,回答表 900w,需求是查出指定用户没有回答过的问题,怎么能快一点,有大佬支个招不。

2020-12-08 11:08:59 +08:00
 hyd8323268
现在是子查询,但是如果用户回答超过 10w 并且问题表进行分页的话会更慢。需要考虑到分页和跳转指定页的实现。
7389 次点击
所在节点    MySQL
66 条回复
hyd8323268
2020-12-10 09:59:30 +08:00
@kinXdle 标识列存什么呢,已回答 id ?十几万 id 集?...
hyd8323268
2020-12-10 10:03:24 +08:00
@byou 如果用户回答过多,就会导致翻很多页都是已回答,并且排序是时间,所有页码也不固定,最后 pass 了
hyd8323268
2020-12-10 10:04:37 +08:00
@keepeye 先查后 not in 效率还不如 not in 子查询
faceRollingKB
2020-12-10 10:04:41 +08:00
@hyd8323268 只能看看业务上能不能做一些优化,比如其他人提到的给问题编组,组与组之间有一定规律,然后只记录用户答题所在的组,业务上就可以不匹配直接得出问题答了没有
hyd8323268
2020-12-10 10:05:06 +08:00
@szuwl 这个好像和分表没有关系吧
hyd8323268
2020-12-10 10:09:06 +08:00
@faceRollingKB 现在的方案是不显示的全部问答,每天凌晨跑脚本,给活跃用户并且回答数超过 5 万级批量生成 1000 个问题 id,放到临时表中,未答条件的直接查库。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/733228

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX