日期:2014-05-16  浏览次数:20430 次

in和exists,到底用谁——JAVA伪代码直白分析二者时间复杂度

引自?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);

?

Java代码??收藏代码
  1. List<Map<String,String>>?studentList?=?select?*?from?student?;??
  2. for(i=0;i<studentList.size();i++){??
  3. ????String?_student_id?=?studentList.get(i).get("student_id");??