MSSQL TEMP TABLE 속도 서브쿼리 속도

728x90

MSSQL TEMP TABLE 속도 및 메모리 문제로 MSSQL 사용자들 에 고민이 존재하고 있다고 봅니다. 예전에 프로젝트 진행 시에 많이들 TEMP TABLE를 사용하여 프로젝트가 진행이 되었습니다.

1. WITH절은 동일한 SQL문장에 반복처리를 방지하고자 많이들 사용했었다.

2. #TEMP TABLE은 복잡한 조건처리등에 사용을 좀 더 효율적으로 사용을 위해 사용했었다.

 

그렇다면 어떤 것을 사용해야 더 효율적이냐 라는 질문에는 답을 할 수가 없다

이유는 각기 업무 사용에 있어 그곳에 맞게 적용이 필요하기 때문이다. 참 어려운 문제이다.

 

WITH절 사용하면서 동시에 여러 개의 WITH문을 돌리게 되면 느려지게 된다.

 

그렇다면 두 가지 방법을 정리해 본다.

/*+ Materialize */ WITH 사용 시에 같이 사용하면 된다.

Materialize는 기본으로 with절 사용하게 되면 적용이 되게 되어 있다. 그런데 가끔 자동적으로 반영이 되지 않는 경우가 있어 기재하여 주는 것이 좋을 것 같다. 필히 체크하세요.

 

/*+ inline*/은 temp TABLE은 생성하지 않고 in line view로 수행하게 생성한다.

임시 테이블(#TEMP)

CREATE #TEMP TABLE EMP_TEMP

ON COMMIT DELETE ROWS

AS

SELECT * FROM EMP;

 

SELECT 데이터가 조회가 된다.

SELECT * FROM #TEMP

 

1. 임시 테이블은 언제까지 저장되는 테이블이라는 조건으로 사용이 됩니다.

- COMMIT 될 때 가지 메모리에 남아 있습니다.

     ON COMMIT DELETE ROWS

- 세션이 종료될 때까지 메모리에 남아 있습니다.

     ON COMMIT PRESERVE ROWS

 

결론은 TEMP TABLE과 서브쿼리 및 WITH처리에 경우를 적절하게 사용을 하고 TEMP TABLE을 생성할 때마다 메모리에 계속 싸이는 문제가 있어 주의를 해야 합니다. TEMP TABLE를 계속 만들고 하는 방식보다는 신규 테이블을 생성하여 INDEX를 잡고 반복적으로 사용하는 것도 좋은 방법일 것 같습니다.

반응형