반응형
SQL에서 컬럼 타입은 다양하다.
그 중에서도 NVARCHAR(MAX) / VARCHAR(MAX) 는 데이터의 길이가 정확하지 않을때 많이 사용한다.
예를 들어서, 게시판 작성시 내용을 NVARCHAR(MAX) 타입을 많이 사용한다.
매번 테이블에서 SELECT(조회) 할때, 당연시하게 *(모든 컬럼)을 사용해서 조회해왔다.
많은 행을 조회할때 컬럼의 사이즈도 조회하는 속도에 영향을 준다는 것을 알게 되었다.
실운영하고 있는 테이블에서 조회를 해봤다.
NVARCHAR(MAX)가 포함되었을때와 포함되어있지 않았을때.
그 결과 위에와 같은 결과를 얻을 수 있었다.
만오천개 데이터를 가져오는 쿼리이다.
- NVARCHAR(MAX)가 포함되었을때 : 약 3초
- NVARCHAR(MAX)가 포함되지 않았을때 : 약 1초
대략 3초정도 차이가 난다. NVARCHAR(MAX) 컬럼 하나때문에.
우리가 쉽게 실수 할 수 있는 예제가 페이징 처리할때이다.
일반적으로 페이징 처리할때, 해당 조건에 맞는 데이터를 모두 조회하고 난 다음
해당 페이지 번호에 맞는 데이터를 가져오는 프로세스가 일반적이다.
이때, 전체 데이터를 가져올때 NVARCHAR(MAX)가 있으면 조회하는 속도에 영향을 미칠 수 있으므로
NVARCHAR(MAX)가 포함되어있는 컬럼 조회는 신중하게 해야 한다.
페이징시에도 가급적이면 NVARCHAR(MAX)가 포함된 컬럼은 조회하는 것을 지양하는 것이 좋다.
꼭 필요한 경우에는, 전체데이터를 가져올때에는 제외하고
해당 페이지 번호에 맞는 데이터를 가져온 후 조인을 이용해서 NVARCHAR(MAX)를 가져오는 것도 하나의 방법이라고 생각한다.
반응형
'개발 > MSSQL' 카테고리의 다른 글
[SQL] 컬럼(Column)의 내용을 조인(Join)해보자. (3) | 2020.03.24 |
---|---|
[SQL] 엑셀(EXCEL) 데이터 DBMS에 가져오기. (7) | 2020.03.09 |
[SQL] 최소~최대 까지 랜덤 숫자 가져오기. (2) | 2020.02.17 |
[SQL] ORDER BY 에서 CASE 문 사용하기. (14) | 2020.02.12 |
[SQL] NULL체크 함수, ISNULL/COALESCE 알아보자. (0) | 2020.01.31 |