导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

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

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

请问我是该拼一个in('单位1'...'单位100')的SQL
还是写拼100个SQL来获得数据比较好呢,
主要考虑时间。
...全文
191 点赞 收藏 13
写回复
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条记录!!!
回复
楼主可以用存储过程,即时转换就成啦.

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

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

--准备一个序数表,辅助处理,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
你的两种方法都不好。

更有效率的方法是,把按条件选出来的值存到一个临时表里,每个值一行,然后关联此临时表查询你要的结果。
回复
最快的莫过于关联.

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

然后用:
select a.* from 原表 a join 查询表 b on a.单位=b.单位
回复
都差不多.

in的实质也是转换成or来计算的.
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告