달레의 코딩 테스트
www.youtube.com
이 글에서는 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
이번 구글 I/O, 구글 여러분들 행사전에 입이 근질근질하셨겠네요. ㅎㅎ
내용은 다들 소개하셨으니 한줄평하자면, 구글이 처음으로 OpenAI에 비해 반발짝정도 앞서나간 이벤트인 것 같습니다.
더불어 출시한 모델과 서비스들을 보니.. 역시 AI는 돈빨이며 구글이 돈빨을 제대로 세웠.. 쿨럭..
이번에 우아한형제들 기술 블로그에 "타입 안전한 API 모킹으로 프론트엔드 생산성 높이기"라는 새 글을 발행하게 되었습니다.
... 더 보기나는 가끔 조합형 한글의 아름다움에 대해 생각한다.
그 아름다움은 단순히 예쁜 글꼴이나 정갈한 종이 위의 자소 배열에서 끝나지 않는다. 진짜 매력은, 정밀한 정보 구조와 이산 수학적 규칙성 속에 숨어 있다.
지
... 더 보기