in和exists
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。
in (parm1,parm2...), parm是有个数限制的
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:
例如:
表A(小表),表B(大表)
1: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列的索引。
相反的
2: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列的索引。
not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。
in 与 =的区别
select name from student where name in ('zhang','wang','li','zhao');
与
select name from student where name='zhang' or name='li' orname='wang' or name='zhao'
的结果是相同的。
相关推荐
如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。 SQL中IN和EXISTS用法的区别 NOT IN sql in与exists区别
里面自己根据网上的资源整理出来的一份sql中in,exists,not in,not exists的使用方法以及注意事项等,有助于初学的朋友们借鉴。
系统要求进行SQL优化,对效率比较低的SQL进行优化,使其运行效率更高,其中要求对SQL中的部分in/not in修改为exists/not
关于Exists,not Exists.in ,not in效率的说明。关于Exists,not Exists.in ,not in效率的说明。关于Exists,not Exists.in ,not in效率的说明。关于Exists,not Exists.in ,not in效率的说明。关于Exists,not Exists.in...
总结:exists 和not exists语句强调是否返回结果集,不要求知道返回什么,与in的区别就是,in只能返回一个字段值,exists允许返回多个字段 提醒:文章中提供了exists和not exists的常用示例,已经经过本人测试,...
SQL语句优化——in,not in,exists,not exists, left join...on博客所需SQL语句.txt欢迎下载!
详细介绍了sql语句中的EXISTS与IN的区别,对于这方面有点模糊的可以参考这篇文档
使用EXISTS(或NOT EXISTS)关键字引入一个子查询时,子查询实际上不产生任何数据;它只返回TRUE或FALS值。 指定一个子查询,检测行的存在。 如果子查询包含行,则返回 TRUE IN效率要差(返回子查询)
in与exists之争(11g).sql
分析了SQL查询中in和exists的区别,有需要的朋友可以参考一下
NULL 博文链接:https://576017120.iteye.com/blog/1624774
sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
主要介绍了SQL SERVER中关于exists 和 in的简单分析,需要的朋友可以参考下
SQL语句优化——in,not in,exists,not exists, left join...on博客所需SQL语句2.txt,欢迎下载!
not exists的子查询,对于子查询不返回行和子查询返回行的查询结果是有区别的 这些细小的差别千万不要被我们所忽视,一旦项目庞大了,想跟踪到具体的错误所花费的时间也是可观的。尽量把这些不必要的错误扼杀在摇篮...
in与exists之争(10g).sql
sql优化sql优化sql优化sql优化