如何用 SQL 求出「都关注了某100人」和「都收藏了某100帖子」的所有用户?
嗯,所以我们能不能说,拼接JOIN SELECT WHERE语句是最佳解决方案?
目前看来,SQLite
上成立
所以在“员工信息表”里不断排除范围可能比让其他表互相做JOIN更快。
我原本也是这个思路:根据num
取得uid
,然后不断缩小uid
数量
但仔细想了想,觉得目前这个帖子里,没有一个SQL
是按照这个思路执行的。
因为,所有的表结构,都是(num, uid)
。上一步积累的uid
,没法用到下一步的过滤
(我觉得B
表可以改成(uid, num)
,来利用上A
表查到的uid
结果列表)
(我再想想。。)
不这么干,而直接全部变成(uid, num)
,就等着扫全表,来一个个用户检查“是否有num
”吧
(SQLite
倒是有个“跳跃扫描”,可以在一定程度上不遵循“最左原则”。但这样也是 1kw 次 uid: 1~1kw, num = ?
次匹配,和扫全表比,谁快还真的说不定)
@老虎会游泳,补充测试完了
基本结论
DISTINCT
耗时都一样user
表,再将方法一换成你的方法后,耗时更像方法二了。。结果
SQL
序号用到的
SQL
0. 新增
user
表1. 每表1个参数,按照你的
SQL
测试2. 每表2个参数,按照你的
SQL
测试3. 每表2个参数,添加
DISTINCT
4. 每表3个参数,按照你的
SQL
测试