问个sql查询问题。inner join on条件和where条件的效率

cxt2007 2015-11-20 09:39:05
如:select xxjj.*,bjsj.bj
from wx_xx_xxjj xxjj
INNER JOIN wx_xx_bjsj bjsj on xxjj.campusid=bjsj.campusid and bjsj.orgcode=10008
where xxjj.type=6 and xxjj.title like concat('%',bjsj.bj,'%') and xxjj.orgcode=10008;


select *
from wx_xx_xxjj xxjj
INNER JOIN wx_xx_bjsj bjsj on xxjj.campusid=bjsj.campusid
where xxjj.type=6 and xxjj.title like concat('%',bjsj.bj,'%') and bjsj.orgcode=10008 and xxjj.orgocde=10008;

两个sql结果一样。
就是 过滤条件 加在 INNER JOIN 表 ON 条件 AND 条件 ; 和加在where后面的效率区别。 INNER JOIN 表 ON 条件 WHERE 条件
...全文
4399 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2015-11-20
  • 打赏
  • 举报
回复 1
这里还有另一个问题就是: 你可以看看这个: SQL Server中表联接的执行计划比较 http://blog.csdn.net/sqlserverdiscovery/article/details/6856654 SQL中left outer join与inner join 混用时,SQL Server自动优化执行计划 http://blog.csdn.net/sqlserverdiscovery/article/details/6893288
LongRui888 2015-11-20
  • 打赏
  • 举报
回复 3
整个你看一下执行计划就可以看出来,两个语句的执行计划应该是一样的。 写on或者where,基本上都会转化为on的写法,也就是关联的时候就过滤数据,而不是在关联后,所有结果集都出来了,然后再通过where来过滤数据。因为你用的是inner join,而不是left join。
Yole 2015-11-20
  • 打赏
  • 举报
回复 1
两个语句放一起,然后按Ctrl+L;一目了然!
cxt2007 2015-11-20
  • 打赏
  • 举报
回复 1
select * from wx_xx_xxjj xxjj INNER JOIN wx_xx_bjsj bjsj on xxjj.campusid=bjsj.campusid where xxjj.type=6 and xxjj.title like concat('%',bjsj.bj,'%') and bjsj.orgcode=10008 ; 那我要是去掉后面的 xxjj.orgcode=10008. 呢 表wx_xx_bjsj 的campusid加了索引。orgcode也有索引。 表xxjj orgcode字段和campusid都有独立索引
Yole 2015-11-20
  • 打赏
  • 举报
回复 1
一样的~ 您把两句放在实行计划里面一起看,开销各站50%,即一样的~

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧