金三银四精选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 要快。

 
上一篇 金三银四精选java面试题-DATETIME 和 TIMESTAMP 的异同
下一篇 金三银四精选java面试题-简述索引的基本原理

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题