MySQL 中 in 和 exists 的区别?

在MySQL中,in语句将外表和内表进行哈希连接,而exists语句则对外表进行循环迭代,在每次迭代中对内表进行查询。我们常常认为exists比in语句更高效,但这种说法并不完全准确,需要根据具体情况进行区分:

  1. 如果查询的两个表大小相当,使用in和exists的差异不大。
  2. 如果其中一个表较小,另一个表较大,那么对于较大的子查询表,使用exists更合适;对于较小的子查询表,使用in更合适。
  3. 对于not in和not exists:如果查询语句使用not in,那么无论内表还是外表都需要进行全表扫描,无法利用索引;而not exists的子查询仍然可以使用表上的索引。因此,无论哪个表较大,使用not exists都比not in更快速。

标签: java, Java面试题, MySQL, Java问题合集, MySQL面试题, Java编程, Java问题精选, Java常见问题