当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-MySQL 中 in 和 exists 的区别?

金三银四精选java面试题-MySQL 中 in 和 exists 的区别?

来源:图灵教育
时间:2023-12-04 15:15:39
 

MySQL 中 in 和 exists 的区别?

在 MySQL 中,IN关键字用于在一个字段匹配多个值。它的语法如下:

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);

EXISTS关键字用于检查子查询结果是否为空。它的语法如下:

SELECT column_name(s)
FROM table_name
WHERE EXISTS (subquery);

区别:

MySQL 中的 in 语句是把外表和内表作 hash 连接,而 exists 语句对外表作 loop 循环,每次 loop 循环再对内表进行查询。

单纯的理解 exists 比 in 语句的效率要高的说法其实是不准确的,要区分情景:

  1. 如果查询的两个表大小相当,那么用 in 和 exists 差别不大
  2. 如果两个表中一个较小,一个是大表,则子查询表大用 exists子查询表小用 in
  3. not in 和 not exists:
  • 如果查询语句使用了 not in,那么内外表都进行全表扫描,没有用到索引;
  • 而 not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用 not exists 都比 not in 要快。