关键字: sql
今天下午,项目代码的review结果送回来了。一共被指摘了50多条。其中有这么一条,指摘的内容是我们在SQL中使用了“ not in ”这样的子查询,要求我们改成 join 方式。
这条SQL是这个样子的:
- selectx,y,zfromtable_awhereuser_id=xxxanduser_name
-
notin(selectuser_namefromtable_b)
这条SQL怎么可能转化成join方式呢?再说有什么必要吗? 一时间大家开始嘲笑指摘的人。不过人家毕竟指摘出来了,所以无论如何也得看看是否可以修改。于是乎,就上网找吧,结果一找还真找到了:
- selecta.x,a.y,a.zfromtable_aasa
-
leftjointable_basbona.user_name=b.user_name
-
wherea.user_id=xxxandb.user_nameisnull
哎,真是无比惭愧啊!平时还以为SQL语句不在话下,结果发现自己是那么的无知。 那么修改成join有什么好处呢?好处就是join可以通过索引来优化,而子查询不可以,差别还是很大的。而且ms的文档也说大部分的子查询其实都可以转换为外部连接的方式。 这次也算是学到了一手,以后要将大部分子查询转换为外部连接。
下边是帖子发表后的随贴:
分享到: