MySQL 쿼리 최적화: Short-Circuit Evaluation

이 글에서는 MySQL 환경에서 Short-Circuit Evaluation을 적용하여 쿼리의 성능을 향상시키는 방법에 대해 설명하겠습니다


<Short-Circuit Evaluation 이란?>


Short-Circuit Evaluation(단락 평가)은 조건문 처리 시 모든 조건을 검사하지 않고, 최초의 '거짓' 혹은 '참'이 판명될 때 평가를 멈추는 로직 처리 방식입니다. 


대다수의 프로그래밍 언어에서 지원하는 기능으로, 효율적인 조건 검사를 가능하게 합니다.


예를 들어, 아래와 같은 if 조건문에서는 두 조건이 모두 참일 때만 customLogic() 함수가 실행됩니다.

```

If (condition_1() && condition_2()) {

customLogic();

}

```


만약 condition_1()이 거짓이라면 condition_2()는 검사하지 않습니다.


즉, 첫 번째 조건을 더 엄격하게 설정함으로써 불필요한 조건의 실행을 방지하여 성능을 개선할 수 있습니다.


<MySQL에서의 Short-Circuit Evaluation 적용 사례>


MySQL 쿼리에서는 Short-Circuit Evaluation을 활용하여 불필요한 연산을 줄일 수 있습니다. 아래의 예시를 살펴봅시다.


```

SELECT COUNT(*) FROM salaries WHERE CONVERT_TZ(from_date, ‘+00:00’, ‘+09:00’) > ‘1991-01-01’;

```

  • 이 쿼리는 시간대 변환을 포함하는 조건으로 데이터를 검색하고, 대략 244만 건의 데이터가 반환될 것입니다.



```

SELECT COUNT(*) FROM salaries WHERE to_date < ‘1985-01-01’;

```

  • 반면 이 쿼리는 특정 날짜 이전의 데이터를 검색할 때 데이터가 존재하지 않음을 보여줍니다.



이 두 조건을 이용해서 쿼리를 작성해야 할 경우 다음처럼 to_date < '1985-01-01' 조건을 먼저 명시하도록 해서 최적화를 누릴 수 있습니다. 


```

SELECT COUNT(*) 

FROM salaries 

WHERE to_date < ‘1985-01-01’ 

AND CONVERT_TZ(from_date, ‘+00:00’, ‘+09:00’) > ‘1991-01-01’;

```


<추가로 알아야 할 사항>


Short-Circuit Evaluation는 인덱스를 사용할 때 주의해야 할 점이 있습니다.


WHERE 절에서 인덱스를 활용할 수 있다면 조건의 순서에 관계없이 인덱스를 사용하여 검색합니다. 


그래서 인덱스를 사용할 경우 Short-Circuit Evaluation 를 고려하지 않아도 된다고 생각할 수 있습니다. 


그러나 여러 조건 중 일부만 인덱스를 활용할 수 있는 경우, Short-Circuit Evaluation을 고려하여 인덱스를 사용하지 않는 조건을 앞에 배치함으로써 성능의 이점을 누릴 수 있습니다.

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 11월 9일 오전 10:58

 • 

저장 16조회 2,444

댓글 0

    함께 읽은 게시물

    이번 구글 I/O, 구글 여러분들 행사전에 입이 근질근질하셨겠네요. ㅎㅎ


    내용은 다들 소개하셨으니 한줄평하자면, 구글이 처음으로 OpenAI에 비해 반발짝정도 앞서나간 이벤트인 것 같습니다.


    더불어 출시한 모델과 서비스들을 보니.. 역시 AI는 돈빨이며 구글이 돈빨을 제대로 세웠.. 쿨럭..


    타입 안전한 API 모킹으로 프론트엔드 생산성 높이기

    이번에 우아한형제들 기술 블로그에 "타입 안전한 API 모킹으로 프론트엔드 생산성 높이기"라는 새 글을 발행하게 되었습니다.

    ... 더 보기

    약점 극복

    

    ... 더 보기

    나는 가끔 조합형 한글의 아름다움에 대해 생각한다.


    그 아름다움은 단순히 예쁜 글꼴이나 정갈한 종이 위의 자소 배열에서 끝나지 않는다. 진짜 매력은, 정밀한 정보 구조와 이산 수학적 규칙성 속에 숨어 있다.


    ... 더 보기

    🎯 유튜브에 100번째 코딩 테스트 문제 풀이 영상을 올렸습니다!

    ... 더 보기

    달레의 코딩 테스트

    www.youtube.com

    달레의 코딩 테스트

     • 

    댓글 1 • 저장 27 • 조회 3,899


    Dependabot을 통한 안전한 의존성 관리

    ... 더 보기

     • 

    저장 14 • 조회 3,567