SQL优化必知技巧——使用exists 代替 in

编程入门 行业动态 更新时间:2024-10-23 01:49:32

SQL优化必知<a href=https://www.elefans.com/category/jswz/34/1767080.html style=技巧——使用exists 代替 in"/>

SQL优化必知技巧——使用exists 代替 in

SQL优化必知技巧——使用exists 代替 in

in 谓词非常方便好用,而且代码也比较容易理解,所以使用非常频繁。但in却成为性能优化的瓶颈,本文通过示例给你详细说明。

示例数据及问题

员工参数课程培训数据,两次不同课程培训分别存在CLASS_A 和 CLASS_B 两张表中。

CLASS_A:

id(编号)name(名称)
1李承
2李莉
3李丽

CLASS_B:

id(编号)name(名称)
1李承
2李莉
4王欣

问题:
查找同时参加了两门课程的员工。

两种方式实现

下面分别使用in 和 exists两种方式实现。

in 方式查询

SELECT *
FROM class_a
WHERE id IN ( SELECT id FROM class_b);

exists 方式查询

SELECT *
FROM class_a A
WHERE EXISTS  ( SELECT * FROM class_b BWHERE A.id = B.id
);

分析

上述两种方法查询结果一样,但exists 方式速度要快。分析如下:

  • 如果连接列id 上有索引,那么查询CLASS_B时,无需查询实际表,仅需要查索引就可以了。
  • 使用exists ,那么只有查到一行数据满足条件就会终止查询,不会产生临时表。
  • 使用in查询时,数据库首先会执行子查询,然后将结果保存在临时表中,然后扫描整个临时表,很多情况下非常耗费资源。

总结

exists 方式查询 比 in 方式查询效率高,但in 可读性较好。建议尽可能使用exists方式,避免使用子查询,除非in 的参数为数值列表。

更多推荐

SQL优化必知技巧——使用exists 代替 in

本文发布于:2024-02-05 11:20:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1745175.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:技巧   SQL   exists

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!