uid | status |
---|---|
1 | 1 |
2 | 2 |
1 | 2 |
1 | 3 |
2 | 3 |
查询只存在 status=1 的用户,这两种写法有什么区别吗
SELECT * FROM t where `status` = 1 and uid not IN (
SELECT uid FROM t as t1 WHERE `status` in (2,3) and t.uid = t1.uid
)
SELECT * FROM t where `status` = 1 and uid not IN (
SELECT uid FROM t as t1 WHERE `status` in (2,3)
)
场景是查历史用户,即 status != 2,3 的,以上是简化的模型,两个字段都有索引
上面的多了一个子查询和外表的条件,在表数据量大的情况下性能谁更好,leader 说第一种查询效率会更高,因为它只在满足外表的条件下进行了过滤。或者有没有其他性能更好的写法?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.