连接查询时,使用where先过滤后连接,还是先联接 最后使用where过滤好?

guan_tu 2015-01-05 08:07:40
方法一:这是最后过滤掉 被删除的学生(status 0 未删除,1 已删除)
select * from score t1
inner join student t2 on t1.studentId=t2.id
where t2.status=0;
方法二:先过滤后联结
select * from score t1
inner join (select * from student where status=0) t2 on t1.studentId=t2.id
...全文
3105 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2015-01-05
  • 打赏
  • 举报
回复
抛开数据分布、索引、选择度等一系列问题,先筛选后连接会更好,因为你要处理的数据量理论上更少,但是优化器会根据实际情况选择它认为的最优方式。所以如果实在要选,我个人建议先筛选后连接,另外那些select *,没必要就不要用*号
zbdzjx 2015-01-05
  • 打赏
  • 举报
回复 1
在我实际使用过程中,多数情况下两者差不多,偶尔第一种快,甚至有时下面的这种方式更快。 select * from (select t1.*, t2.status from score t1 inner join student t2 on t1.studentId=t2.id ) aaa where status=0;
yoan2014 2015-01-05
  • 打赏
  • 举报
回复 1
查询优化器会自动进行优化,在连接列有进行条件的筛选时会先进行资料的筛选再进行join的动作
还在加载中灬 2015-01-05
  • 打赏
  • 举报
回复 3
逻辑上,第二种可能要高效,其实不然,SQLSERVER优化器,会提前把条件带入表连接筛选,你的这两个查询,效率上应该是一样的。
卖水果的net 版主 2015-01-05
  • 打赏
  • 举报
回复
你在查询分析器中 按一下 Ctrl + L ,看看执行计划, 两个语句的效率是一样的,最终都转换同样的语句。

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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