近来遇到一个比较困扰的优化问题,存储过程的主体逻辑如下:
ALTER PROC [dbo].[DBA_TroubleShooting] AS BEGIN DECLARE @StartTime DATETIME DECLARE @EndTime DATETIME SELECT @StartTime=CONVERT(VARCHAR,GETDATE()-1,112),@EndTime=CONVERT(VARCHAR,GETDATE(),112) DECLARE @Spreader VARCHAR(32) DECLARE loop_cursor CURSOR FOR SELECT spreadAccount FROM dbo.SpreadStatisticsAccount ssa WITH(NOLOCK) --WHERE spreadAccount='LG0537' --分别用LG0537、LG0540测试 OPEN loop_cursor; FETCH NEXT FROM loop_cursor INTO @Spreader WHILE @@FETCH_STATUS = 0 BEGIN -- 日登录用户 DECLARE @DayLoginUserNum INT SELECT @DayLoginUserNum = COUNT(DISTINCT ais.UserId) FROM dbo.AccountsInfoSimple ais WITH(NOLOCK) INNER JOIN dbo.UserLoginRecord t WITH(NOLOCK) ON ais.userID = t.userID WHERE ais.spreaderAccount = @Spreader AND ais.userType = 0 AND t.loginDate BETWEEN @StartTime AND @EndTime AND t.typeCode = '02'; SELECT @DayLoginUserNum --注册、登录、充值、活跃数、游戏时长... --INSERT INTO dbo.SpreadAccountStatisticsNew(...)VALUES(...,@Spreader,@DayLoginUserNum,...) FETCH NEXT FROM loop_cursor INTO @Spreader END CLOSE loop_cursor; DEALLOCATE loop_cursor; END