MySQL: ID in A not in B

碰上了大数据的问题,一个表上万,另一个上百万,虽然key_id加了索引,但是如果顺便写写的话,遍历百万级的表的时间也不是开玩笑的。

查了一些资料,可以这样解决:

SELECT * FROM a LEFT JOIN b ON a.id = b.aid WHERE b.aid IS NULL;

把小的表放在查询前,LEFT JOIN 链入大的表,这样已经是MySQL能做到的最好办法了吧,因为无论怎么样,遍历A+查询B的计算量是省不掉的。

另外有些童鞋会问,WHERE 指定 b.aid 是NULL,怎么用来查找呢,其实Where 这里指定的条件是 LEFT JOIN后的结果,也就是我们取 NOT IN b 的含义了。

参考:
[1]Stackoverflow
[2]hashmysql

此条目发表在SQL, 编程分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。 必填项已用*标注