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个已排序的列表的匹配)说应该也不会性能低啊