DB/MSSQL

[MSSQL] 쿼리로 성능 체크. 스칼라 or 프로시저

Nuu 2025. 4. 7. 10:14

 

쿼리를 100번 돌려서 걸리는 시간 계산하기

 


DECLARE @i INT = 0;
DECLARE @elapsed1 INT = 0;
DECLARE @elapsed2 INT = 0;

DECLARE @tempStart DATETIME;
DECLARE @result1 INT;
DECLARE @result2 INT;

-- 프로시저 결과 저장용 테이블
DECLARE @temp TABLE (
   [프로시저 결과 스키마]
);

WHILE @i < 100 -- 100번 돌림, 반복 많을수록 오차 감소
BEGIN
	-- [비교 1]
    SET @tempStart = GETDATE();
    -- 스칼라
	SELECT @result1 = [스칼라];
	
	-- 프로시저
	-- 프로시저 결과를 임시 테이블에 저장
    	DELETE FROM @temp;
    	INSERT INTO @temp
    	EXEC [프로시저];

	-- 결과 가져오기
	SELECT TOP 1 @result1 = PRICE FROM @temp;
    SET @elapsed1 += DATEDIFF(MILLISECOND, @tempStart, GETDATE());
    
	-- [비교 2]
    SET @tempStart = GETDATE();
    
	-- 스칼라
	SELECT @result2 = [스칼라];

	-- 프로시저
	DELETE FROM @temp;
    	INSERT INTO @temp
    	EXEC [프로시저];
    
	-- 결과 가져오기
	SELECT TOP 1 @result2 = PRICE FROM @temp;
    SET @elapsed2 += DATEDIFF(MILLISECOND, @tempStart, GETDATE());

    SET @i += 1;
END

-- 최종 결과 출력
SELECT 
    @result1 AS 결과Q1,
    @result2 AS 결과Q2,
    @elapsed1 / 100.0 AS 평균Q1ms,
    @elapsed2 / 100.0 AS 평균Q2ms,
    (@elapsed1 - @elapsed2) AS Time_Diff_Total_ms,
    (@elapsed1 - @elapsed2) / 10.0 AS Avg_Time_Diff_Per_Run_ms;​