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,449

댓글 0

    함께 읽은 게시물

    어제 저커버그 인터뷰에서 연구자들을 돈으로 매수..아니 돈으로 경쟁사들에게서 빼오고 있다는 의혹에 대해서 답했는데요.


    이는 잘못된 말이라며, 탑티어 연구자들의 욕망(!)은 GPU를 최대한 많이 사용할 수 있기를 바라는 것이고, 그래서 작은 팀으로 무한대의 GPU를 쓸 수 있게 해 준다는 것으로 유혹(?) 했다고 합니다. (*욕망, 유혹 같은 표현을 저커버그가 쓴 건 아님)


    ... 더 보기

    조회 1,263


    테드(TED) 강의장에 황소가 등장했다. <생각의 공유> 저자 리오르 조레프는 청중에게 황소 무게를 예측해 보라고 제안한다. 그러자 140㎏에서 3t까지 다양한 오답이 쏟아졌다.

    ... 더 보기

    왜 공동체에 집단 지성이 필요한가?

    기호일보 - 아침을 여는 신문

    왜 공동체에 집단 지성이 필요한가?

    MCP 모르면 대체 얼마나 손해 보는 걸까?🤔

    ... 더 보기

    MCP 모르면 대체 얼마나 손해 보는 걸까? | 요즘IT

    요즘IT

    MCP 모르면 대체 얼마나 손해 보는 걸까? | 요즘IT


    Replit 이용 후기

    최근 Replit를 사용하면서 느낀 점을 남겨봅니다.

    ... 더 보기

    고용노동부에서 주관하는 청년미래플러스 3기를 모집 중이라고 합니다.

    구직자와 재직자 두 가지 트랙을 동시에 모집한다고 하네요.

    • 모집 기간: 6월 15일 ~ 8월 3일

    ... 더 보기