如果改进这句?

xaojancsdn 2003-05-08 07:37:00
我在程序中用到这句:
select * from db1 where id
in (select distinct(id) from db2 where id='''+edit1.text+'''')

但是两个表的数据都大,在客户端处理起来很慢。如何改进?(不用视图)
再求一问:
我要对查找出来的数据集表逐行处理(必须逐行),因为要处理的记录数多,在客户端
也很慢,有朋友说在数据库后台做,请问如何做?有人说用游标,但也有说效率更差。
请帮帮忙?
...全文
48 点赞 收藏 19
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
rdsdh 2003-05-09
这个问题,楼上很多朋友使用了子查询。
我个人认为这是一个相关子查询效率极低。
回复
rdsdh 2003-05-09
to madyak(无天):
select * from db1 where id='''+edit1.text+''''
这样的优化丢失了条件:db2.id=db1.id.
按照原始条件,如果DB2是空表,尽管存在db1.id=edit1.text记录也肯定返回空表。


回复
joygxd 2003-05-09
select db1.* from db1,db2 where db1.id=db2.id and db2.id ='''+edit1.text+''''
回复
蓝天 2003-05-08
使用技巧可以避免很多的逐行处理要求
回复
蓝天 2003-05-08
如果要逐行处理,你一定要给大家一个充分的理由!!!
回复
madyak 2003-05-08
我仔细看了看可以优化:
/* select * from db1 where db1.id= '''+edit1.text+''''
and EXISTS (select * from db2 where db2.id=db1.id) */

这样:
select * from db1 where id='''+edit1.text+''''


回复
madyak 2003-05-08
select * from db1 where id
in (select distinct(id) from db2 where id='''+edit1.text+'''')

要把distinct去掉会省些开销!
回复
caiyunxia 2003-05-08
为什么必须逐行?
处理什么
回复
xaojancsdn 2003-05-08
不好意,我错了
回复
xaojancsdn 2003-05-08
大力兄的好像语法不太多,是不是exists那儿写错了个什么。通不过
回复
pengdali 2003-05-08
'select * from db1 where id exists (select 1 from db2 where id2=db1.id and id='''+edit1.text+''')')
回复
rdsdh 2003-05-08
select * from db1 where id
in (select distinct(id) from db2 where id='''+edit1.text+'''')
老兄你的非相关子查询语句还是很好的,只不过你要求返回的是整张表,而且表很大,自然费时啦。
类似的语句你可以试试:
Select A.*
From db1 A inner join db2 B
on A.id = B.id and B.id = '''+edit1.text+''''
用MS SQL的查询分析看一下那里给出了,查询执行详细步骤及各步代价值。

对于第二问,请尽量使用数据库的表集合运算功能,游标功能不得以而为之,不过也比你在前台一条条处理强多了。很多问题看来须用游标处理,但实际上还是可以使用表的集合运算的。
回复
xaojancsdn 2003-05-08
第二问给些看法吧!
回复
caiyunxia 2003-05-08
select * from db1 where exists (select top 1 1 from db2 where db1.id=db2.id and db2.id ='''+edit1.text+'''')
回复
hooboo 2003-05-08
给两个表的ID加聚集索引或者主键约束。

回复
蓝天 2003-05-08
select * from db1 where exists (select 1 from db2 where db1.id=db2.id and db2.id ='''+edit1.text+'''')
回复
蓝天 2003-05-08
select db1.* from db1,db2 where db1.id=db2.id and db2.id ='''+edit1.text+''''
回复
蓝天 2003-05-08
select * from db1,db2 where db1.id=db2.id and db2.id ='''+edit1.text+''''
回复
caiyunxia 2003-05-08
select * from db1 where id ='''+edit1.text+'''
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-05-08 07:37
社区公告
暂无公告