왜 공동체에 집단 지성이 필요한가?
기호일보 - 아침을 여는 신문
이 글에서는 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
어제 저커버그 인터뷰에서 연구자들을 돈으로 매수..아니 돈으로 경쟁사들에게서 빼오고 있다는 의혹에 대해서 답했는데요.
이는 잘못된 말이라며, 탑티어 연구자들의 욕망(!)은 GPU를 최대한 많이 사용할 수 있기를 바라는 것이고, 그래서 작은 팀으로 무한대의 GPU를 쓸 수 있게 해 준다는 것으로 유혹(?) 했다고 합니다. (*욕망, 유혹 같은 표현을 저커버그가 쓴 건 아님)
테드(TED) 강의장에 황소가 등장했다. <생각의 공유> 저자 리오르 조레프는 청중에게 황소 무게를 예측해 보라고 제안한다. 그러자 140㎏에서 3t까지 다양한 오답이 쏟아졌다.
... 더 보기올
... 더 보기고용노동부에서 주관하는 청년미래플러스 3기를 모집 중이라고 합니다.
구직자와 재직자 두 가지 트랙을 동시에 모집한다고 하네요.
모집 기간: 6월 15일 ~ 8월 3일