日期:2014-05-16 浏览次数:20443 次
引自?http://lazy2009.iteye.com/blog/1697458
?
?
in和exists的讨论从未间断过。之前有“今年是龙年大哥”的有数据有真相的测试博文,现在有程序员老鸟写sql语句的经验之谈上的疯狂讨论。关于exists和in,就是很少人站出来,直白地分析二者本质上的差别,这方面的文章大都是用晦涩的文字表述,或者直接给结论——什么情况下用exists,什么情况下用in,而不给出原理。结果时至今日,还有许多人认为exists一定比in性能高。下面鄙人用JAVA的伪代码,从理论上分析exists和in的时间复杂度。
?
?
学生信息表(student_id 学生id, name 学生名称)
student(student_id,name)?
?
学生总分表
score(student_id,total)
?
现在查询出总分(total)超过90分的学生信息。
?
?
1 exists方式
select * from student a where exists (select 1 from score b where b.total>90 and b.student_id = a.student_id);
?