SQL表JOIN连接性能问题

oujiachao 2012-12-19 10:50:54
select * from UserInfo u left join CafesInfos c on c.UserId=u.UserId
where u.RoleId in (2,3,4) --这个是两个表连接好以后生产临时表where在去筛选的,如果数据很大不是要很长时间连接再去筛选?

select * from (select * from UserInfo u where u.RoleId in (2,3,4))s left join CafesInfos c on s.UserId=c.UserId --既然上面那样我不如先where过滤再去连接,但这样又会先生成一个临时表,多少select 查询 性能会不会反而降低呢?
我网上找了相关资料没用
...全文
405 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
3721_zcx 2012-12-19
  • 打赏
  • 举报
回复
如果数据量大,第二种比较高效率
快溜 2012-12-19
  • 打赏
  • 举报
回复
如果UserInfo 数据量很大先筛选出来在join会高一点,否则两条一样,没多大差别
xuam 2012-12-19
  • 打赏
  • 举报
回复
效率一样吧.
發糞塗牆 2012-12-19
  • 打赏
  • 举报
回复
看下执行计划最好,而且在不同的数据量测试一下才有讨论的价值。就好像一个表有10条数据,表扫描很慢吗?但是当这个表有100万的时候,你敢随便表扫描吗?
haitao 2012-12-19
  • 打赏
  • 举报
回复
理论上,越内层的结果集越小,性能越好 但是,现在的数据库引擎应该都能很好地优化了,实际的效果应该一样了 另外,还记得很多地方都说left join性能很低,不建议使用 但是我在sql2000、2005几乎没感觉到慢 left join如果有索引,按理(实现原理:2个已排序的列表的匹配)说应该也不会性能低啊

22,209

社区成员

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

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