就这些分,请人帮忙看看这段sql代码
create proc Depth
as
declare @Count int ,@Date datetime,@CountIp varchar(200),@Depth int
DECLARE Flow_CUR CURSOR FOR
select subString(CONVERT(varchar, CountTime, 120 ),0,CHARINDEX( ': ',CountTime))+ ':00:00 ' as Date,
CountIp,count(CountUrl) as Depth
from Count_ReturnAndDepth where CustomerID= '1 'and StatisticsDepthOrFalse=2 group by CountIp,
subString(CONVERT(varchar, CountTime, 120 ),0,CHARINDEX( ': ',CountTime))+ ':00:00 ',HostName
OPEN Flow_CUR
fetch next from Flow_CUR into @Date,@CountIp,@Depth
WHILE (@@FETCH_STATUS) = 0
BEGIN
select @Count=DepthCount from Count_DepthInformation where CustomerID= '1 'and CountIP=@CountIp and PostTime=@Date
if exists(select 1 from Count_DepthInformation where CustomerID= '1 'and CountIP=@CountIp and
PostTime=@Date)update Count_DepthInformation set DepthCount=1 +@Count where CustomerID= '1 '
and CountIP=@CountIp and PostTime=@Date
else insert into Count_DepthInformation (CustomerID,CountIp,DepthCount,PostTime)
values ( '1 ',@CountIp, '1 ',@Date)
FETCH NEXT FROM Flow_CUR into @Date,@CountIp,@Depth
END
CLOSE Flow_CUR
DEALLOCATE Flow_CUR
Update Count_ReturnAndDepth set StatisticsDepthOrFalse=1 where StatisticsDepthOrFalse=0
----------------------------------------------------
在做一个流量的统计,关系到两个表,我使用游标测试时,速度超慢,4000条要运行2分多钟,不知道能不能使用其他办法改进,请大家帮忙看看,谢谢!!
------解决方案--------------------自己先测一下是哪步引起效率极低的吧,根据测试结果来更改一些主要的内容。
比如先测一下
SELECT CONVERT(CHAR(13), CountTime, 120 )+ ':00:00 ' AS Date,CountIp,COUNT(1) AS Depth
FROM Count_ReturnAndDepth
WHERE CustomerID= '1 'AND StatisticsDepthOrFalse=2
GROUP BY CountIp,Date,HostName
--看看耗时多久。
如果耗时长的话想办法优化此句。
------解决方案--------------------up