sql2005语句中in、like、=、exist四个的节省资源方面比较

来源:百度知道 编辑:UC知道 时间:2024/06/25 08:06:16
都说exist最为节省资源,但exists 的组合也必须用到=或in
各位有成功案例的能否详细说明怎么改,使得
select * from where(工作单号='12334454')等的条件查询变成exist语句最为省资源,究竟in、like、=、exist相互改,哪种方式最省资源省内存,改的例子如何,哪位可以详细讲解下,91193@sohu.com

我记得你昨天好像也问过,我当时就说能用EXISTS尽量用EXISTS了
其实既然用EXISTS很少会用到IN的,否则就是画蛇添足了。
你的这个例子没有价值,本来就没有用到IN。
我给你个例子吧,
假设有三个表
学生S(S#,SNAME,AGE,SEX)
学习SC(S#,C#,GRADE)
课程C(C#,CNAME,TEACHER)
现在要检索WANG同学未学的课程的课程号。
分别有两种方法能完成查询(in,exists)
方法一:
Select c#
From C
Where c# not in (select c#
From sc,s
Where s.name=’wang’and s.s#=sc.s#)
方法二:
Select c#
From c
Where not exists(select *
From s,sc
Where s.s#=sc.s# and sc.c#=c.c# and sname=’wang’)
在这个查询中可能速度差别不大,但是实际中如果数据量大的话,能用EXISTS那就尽量用EXISTS,因为嵌套在IN内的的SQL语句返回的是具体结果,而EXISTS只返回[是]还是[否],一般速度比IN快很多
另外,like就不要和它们做比较了,根本就不是一件事情,功能不同的。
IN的本质是N个等于,中间用OR连起来,效率和IN是一样的,如果你不嫌烦的话,你甚至可以把IN里面的几百件个结果用几百上千个等于号连起来,查询效率是一样的,只不过,可能到下班你那句SQL还没有写完吧。

in与exists的区别:http://hi.baidu.com/dinguangx/blog/item/2c4d0213cbe9