日期:2014-05-17  浏览次数:20554 次

SQL表JOIN连接性能问题
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 查询 性能会不会反而降低呢?
我网上找了相关资料没用
------解决方案--------------------
如果UserInfo 数据量很大先筛选出来在join会高一点,否则两条一样,没多大差别
------解决方案--------------------
理论上,越内层的结果集越小,性能越好
但是,现在的数据库引擎应该都能很好地优化了,实际的效果应该一样了

另外,还记得很多地方都说left join性能很低,不建议使用
但是我在sql2000、2005几乎没感觉到慢
left join如果有索引,按理(实现原理:2个已排序的列表的匹配)说应该也不会性能低啊