[MSSQL] 대량의 데이터 조회할 때 조금 더 빠르게 조회하기 feat. CONVERT

최근에 대량의 데이터를 아주 간단한 쿼리문으로 조회해야 하는데 꽤나 오랜 시간이 걸렸던 경험을 했습니다. SELECT 그리고 WHERE 문만 있는 아주 간단한 케이스인데 시간이 40초 가량 걸리던 쿼리문이었습니다.

그리고 바로 이 경험에서 전문가와 비전문가의 차이점을 알게 되었습니다.

전문가가 쿼리문에 아주 간단한 양념 하나를 넣었더니 데이터를 조회 하는데 딱 1초 걸리더라구요. 지금부터 그 간단한 과정을 기록으로 납겨 봅니다.

비전문가가 작성한 쿼리문

SELECT * FROM TABLE_PRODUCT
WHERE UNDERLYING_TICKER='AAPL US EQUITY'

(물론 실제로 사용하던 쿼리문을 조금 각색 했습니다.)

쿼리문만 보자면 TABLE_PRODUCT 라는 이름의 테이블에서 UNDERLYING_TICKER 컬럼의 값이 AAPL US EQUITY 인 데이터들을 조회하는 쿼리입니다. 아주 간단하죠? 그런데 데이터 양이 많아지니 이 간단한 쿼리문이 꽤 걸리더라구요.

전문가가 손을 봐준 쿼리문

전문가가 위 쿼리문에 간단하게 양념을 쳐주었습니다. 그 결과물이 아래 입니다.

SELECT * FROM TABLE_PRODUCT
WHERE UNDERLYING_TICKER=CONVERT(CHAR(20), 'AAPL US EQUITY')

차이를 느끼시나요? 바로 검색할 값의 데이터 형식을 바꿔 주는 것입니다.

실제 테이블 컬럼의 데이터 형식과 일치하게 검색하기

알고 보니 실제 테이블에서 UNDERLYING_TICKER 컬럼의 데이터 형식이 CHAR(20)으로 설정되어 있었고, 사용한 쿼리문에서의 데이터 형식은 VARCHAR 형식으로 지정되어 있더라구요. 이걸 CONVERT 함수를 이용하여 CHAR(20) 으로 맞춰준 다음 조회하는 것입니다.

이것만으로도 굉장한 속도의 증가를 느낄 수 있었습니다.

CONVERT 함수

CONVERT 함수는 앞서 말한대로 데이터 형식(타입)을 바꿔주는 함수 입니다. 주로 사용하는 경우는 날짜의 형식 변환을 할 때입니다. 기본적인 함수의 사용 방법은 아래와 같습니다.

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

CAST 함수와 용도가 비슷합니다.

주의할 점

주의할 점이라고 하기에는 뭐하지만, 만약 조회할 데이터의 양이 방대하지 않다면 속도에 큰 영향을 미치지 못 합니다. 다시말해, 쿼리문의 WHERE 문으로 검사할 데이터가 수천, 수만개이고 조회된 데이터가 수백개라면 속도 차이가 분명하지만, 그렇지 않다면 큰 차이는 없다는 것이죠. 직접 실험을 해볼 필요가 있습니다.

참고자료