IN vs INNER JOIN
来源:互联网 发布:经传全套指标公式源码 编辑:程序博客网 时间:2024/05/18 06:20
针对本机SharePoint的两张表写了两个SQL语句
select * from AllDocs where ListId in (select tp_ID from AllLists where tp_WebId='guid')
select * from AllDocs inner join AllLists on dc.ListId = l.tp_ID and tp_WebId = 'guid'
从返回内容来看,二者的结果是一样的,那么就让我们比较一下二者的效率吧,可以看如下执行计划分析:
然后再看一下在数据库中真正的执行情况:
最后我们具体分析此SQL语句中的IN和INNER JOIN的不同,也就是执行计划分析中的唯一不同支持——Right Semi Join和Inner Join。
查了很多关于Right Semi Join的解释,看着都比较糊涂,不经意的看到一篇文章中这样写道:"semi joins are joins that stop when the first hit is encountered. They are used many times for "existence" checks.” 突然有种恍然大悟的感觉,所谓的“半部连接”原来是指不做交叉匹配的意思。这就比较容易解释为什么上述两条SQL语句中为什么第一条要比第二条在执行计划中稍快,并且在实际执行中也少了很多Logical Read的操作。
通过以上描述,我们可以知道,IN操作可以保证操作表数据的唯一性,而INNER JOIN一旦条件用的不对的话,会出现很多重复数据,导致查询结果的不准确。并且IN并不是查询效率慢,而是要看具体怎么使用,在各种情况下,不同的使用方式会得到不同的执行效率结果的。
- IN vs INNER JOIN
- in left join inner join
- inner/outer join in hibernate
- inner/outer join in hibernate
- inner/outer join in hibernate
- FOR ALL ENTRIES vs. INNER JOIN
- 使用 EXISTS 代替 IN 和 inner join
- oracle常用连接 left join vs right join vs inner join
- SQL中left join、right in、inner join的区别
- INNER JOIN
- INNER JOIN
- INNER JOIN
- INNER JOIN
- inner join、join区别
- in 和 inner join 的区别 join using 和join on 的区别
- 关于in 和 inner join 语句的效率?
- SQL in 与inner join查询结果的区别
- Inner vs outer joins in SQL interview questions
- thinkPHP url模式与例子
- error C2146: 语法错误 : 缺少“;”
- SuperFish一款基于jQuery的级联下拉菜单
- 关于我的假期——向ACM之路前进
- 51 Insanely Useful Emacs Shortcuts
- IN vs INNER JOIN
- Oracle方案
- Java注释规范整理(转)
- Some useful websites
- xSocket multiplexed介绍
- Synchronize函数
- 图片格式转换工具制作
- Oracle 临时表使用詳解
- GRUB2 General menuentry Construction Rules(from ubuntu docs)