碰上了大数据的问题,一个表上万,另一个上百万,虽然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 的含义了。