日期:2014-05-18  浏览次数:20822 次

c# 优化SQL语句还是优化程序代码
现在项目中遇到这样一个问题,
现有这样一个表A,记录如下
ordID,RowNo,BatchID
A0001 0 1
A0001 1 1
A0001 2 2
A0001 3 3
A0002 0 1

在网上通过这样的语句
stuff((SELECT ','+BATCHID FROM biw02013 WHERE biw02013.ORDID=A.ORDID FOR XML PATH('')),1,1,'') BatchId 
使得满足这样的查询效果
AOOO1 1,1,2,3
A0002 1
但是发现这样的话数据库查询时间相对要慢一些
我想如果通过程序代码循环取的ordID,然后根据ordID到表A(ordID,RowNo为主键)中取出BatchID,处理后再显示
我想问一下这两种方式那个效果更好点

------解决方案--------------------
这个要调试过才能确定,后一种方法要多次访问数据库,I/O操作多了
------解决方案--------------------
其实有时间 还是2个都优化好,但如果非要选个,还是选择程序代码吧
------解决方案--------------------
建个函数试试,对ordID建立索引
SQL code
create function GetString(@ordID varchar(20))
returns varchar(1000)
as
begin
    declare @temp varchar(1000)
    set @temp=''
    select @temp = @temp+','+convert(varchar(50),BatchID) from Temp where ordID=@ordID
    return stuff(@temp,1,1,'')
end

select ordID,dbo.GetString(ordID) from Temp group by ordID

------解决方案--------------------
循环取到所有的ordID和RowNo,然后拼成一个SQL,一次性访问数据库,当然表建立索引,会快很多