프로그래밍

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

📈 4

최근에 대량의 데이터를 아주 간단한 쿼리문으로 조회해야 하는데 꽤나 오랜 시간이 걸렸던 경험을 했습니다. 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 문으로 검사할 데이터가 수천, 수만개이고 조회된 데이터가 수백개라면 속도 차이가 분명하지만, 그렇지 않다면 큰 차이는 없다는 것이죠. 직접 실험을 해볼 필요가 있습니다.

참고자료