用in语句的速度快 还是 分开写多个SQL语句快

losenetway 2003-12-10 02:46:38
有如下操作,
我有一个表,应该是10万条记录的样子,
他里面有一个字段是单位,总的单位有200个的样子,
现在我选择了其中的100个左右的单位,通过条件的限制,要从表中取出100条左右的记录。

请问我是该拼一个in('单位1'...'单位100')的SQL
还是写拼100个SQL来获得数据比较好呢,
主要考虑时间。
...全文
925 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
losenetway 2003-12-12
  • 打赏
  • 举报
回复
谢谢大家
losenetway 2003-12-11
  • 打赏
  • 举报
回复
谢谢大家
Rotaxe 2003-12-10
  • 打赏
  • 举报
回复
和你需要的字段和索引中的字段有关。如果需要的字段都在一个复合索引中,单位是这个索引的第一列,分开写多个SQL语句快些。否则还是用in写一个SQL快些,用表或临时表我觉得也没用,可以试一下
CrazyFor 2003-12-10
  • 打赏
  • 举报
回复
in('单位1'...'单位100')

100000条记录,200个左右的单位,取100条录,怎么可能需要100个单位呢???

100000/200=500 平均一下,一个单位就有500条记录!!!
zjcxc 元老 2003-12-10
  • 打赏
  • 举报
回复
楼主可以用存储过程,即时转换就成啦.

当然,下面的方法没有通过严格测试,仅供参考,楼主可以测试一下其处理速度:

例子,用存储过程来实现楼主要求的查询:

--准备一个序数表,辅助处理,top 1000中的1000表示最多可以处理1000个单位.第一次使用的时候创建,以后就不用再建了.
select top 1000 id=identity(int,1,1) into 序数表
from(select id from sysobjects) a,(select id from sysobjects) b
go
alter table 序数表 add constraint PK_序数表 PRIMARY KEY CLUSTERED (id)
go

--查询处理的存储过程
create proc p_qry
@dw varchar(8000) --要查询的单位列表,单位之间用,分隔
as
select a.*
from 数据表 a join(
select 单位名称=substring(name,b.id,charindex(',',name+',',b.id)-b.id)
from (select name=@dw) a,#tb b where substring(','+name,b.id,1)=','
) b on a.单位名称=b.单位名称
go

LoveSQL 2003-12-10
  • 打赏
  • 举报
回复
分开写多个SQL语句快些。。。。
建议采用表关联会更好一些。。。
hglhyy 2003-12-10
  • 打赏
  • 举报
回复
in是不可取的, dlpseeyou(豆子) 建 说得对,in 最终还是要转换成or 的,
用表关联,方法如 二楼!
losenetway 2003-12-10
  • 打赏
  • 举报
回复
单位是用户自己在自己有权限操作的单位随便选择的
所以用建表的方法不是很合适
dlpseeyou 2003-12-10
  • 打赏
  • 举报
回复
用or好, 因为in的得转换成or来计算的
txlicenhe 2003-12-10
  • 打赏
  • 举报
回复
建议用表,两个表都可以对单位建索引。
victorycyz 2003-12-10
  • 打赏
  • 举报
回复
你的两种方法都不好。

更有效率的方法是,把按条件选出来的值存到一个临时表里,每个值一行,然后关联此临时表查询你要的结果。
zjcxc 元老 2003-12-10
  • 打赏
  • 举报
回复
最快的莫过于关联.

将你要查询的单位做成一个表

然后用:
select a.* from 原表 a join 查询表 b on a.单位=b.单位
zjcxc 元老 2003-12-10
  • 打赏
  • 举报
回复
都差不多.

in的实质也是转换成or来计算的.

34,575

社区成员

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

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