一条完整的 SELECT 语句内部的执行顺序是这样的:
哪种情况下应该使用 EXISTS,哪种情况应该用 IN,选择的标准是看能否使用表的索引吗?
索引是个前提,其实选择与否还是要看表的大小。你可以将选择的标准理解为小表驱动大表。在这种方式下效率是最高的。
SELECT * FROM A WHERE cc IN (SELECT cc FROM B); SELECT * FROM A WHERE EXISTS (SELECT cc FROM B WHERE B.cc=A.cc);
当 A 小于 B 时,用 EXISTS。因为 EXISTS 的实现,相当于外表循环,实现的逻辑类似于:
for i in A for j in B if j.cc == i.cc then ...
当 B 小于 A 时用 IN,因为实现的逻辑类似于:
for i in B for j in A if j.cc == i.cc then ...
原文:https://www.cnblogs.com/tzzt01/p/13728972.html