SQL中的EXISTS,IN,NOT EXISTS, NOT IN使用总结
程序员文章站
2022-09-05 13:10:20
EXISTS 和 IN在主表和从表都对关联的列建立索引的前提下:当主表比从表大时,IN查询的效率较高;当从表比主表大时,EXISTS查询的效率较高;举例如下:A表小,B表大;select * from A where cc in (select cc from B)效率低,用到了A表上cc列的索引;select * from A where exists(select cc from B where cc=A.cc)效率高,用到了B表上cc列的索引;反过来select ....
- EXISTS 和 IN
-
在主表和从表都对关联的列建立索引的前提下:
当主表比从表大时,IN查询的效率较高;
当从表比主表大时,EXISTS查询的效率较高; -
举例如下:
A表小,B表大;
select * from A where cc in (select cc from B)
效率低,用到了A表上cc列的索引;
select * from A where exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引; -
反过来
select * from B where cc in (select cc from A)
效率高,用到了B表上cc列的索引;
select * from B where exists(select cc from A where cc=B.cc)
效率低,用到了A表上cc列的索引; -
原因如下:
in是先执行子查询,得到一个结果集,将结果集代入外层作为条件执行主查询,子查询只需要执行一次
exists是先从主查询中取得一条数据,再代入到子查询中,执行一次子查询,判断子查询是否能返回结果,主查询有多少条数据,子查询就要执行多少次
- not in 和 not exists
查询语句使用not in ,内外表都进行全表扫描,不会用到索引;
not extsts 的子查询会用到表上的索引;
无论哪个表大,not exists都比not in要快;
本文地址:https://blog.csdn.net/hmyqwe/article/details/108983030
上一篇: mysql2oracle 数据库转换
下一篇: Cassandra数据库的安装及常用操作
推荐阅读
-
sql中varchar和nvarchar的区别与使用方法
-
HighCharts图表控件在ASP.NET WebForm中的使用总结(全)
-
SQL查询中in和exists的区别分析
-
SQL中的事务、特点、特性、使用介绍
-
JSP中操作数据库的常用SQL标签用法总结
-
sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
-
sql server 2005中使用with实现递归的方法
-
SQL2005中char nchar varchar nvarchar数据类型的区别和使用环境讲解
-
SQL Server 中 `JSON_MODIFY` 的使用
-
mssql和sqlite中关于if not exists 的写法