如果改进这句?

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

但是两个表的数据都大,在客户端处理起来很慢。如何改进?(不用视图)
再求一问:
我要对查找出来的数据集表逐行处理(必须逐行),因为要处理的记录数多,在客户端
也很慢,有朋友说在数据库后台做,请问如何做?有人说用游标,但也有说效率更差。
请帮帮忙?
...全文
86 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
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+'''

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧