MySQL 쿼리 최적화: Short-Circuit Evaluation
이 글에서는 MySQL 환경에서 Short-Circuit Evaluation을 적용하여 쿼리의 성능을 향상시키는 방법에 대해 설명하겠습니다 Short-Circuit Evaluation(단락 평가)은 조건문 처리 시 모든 조건을 검사하지 않고, 최초의 '거짓' 혹은 '참'이 판명될 때 평가를 멈추는 로직 처리 방식입니다. 대다수의 프로그래밍 언어에서 지원하는 기능으로, 효율적인 조건 검사를 가능하게 합니다. 예를 들어, 아래와 같은 if 조건문에서는 두 조건이 모두 참일 때만 customLogic() 함수가 실행됩니다. ``` If (condition_1() && condition_2()) { customLogic(); } ``` 만약 condition_1()이 거짓이라면 condition_2()는 검사하지 않습니다. 즉, 첫 번째 조건을 더 엄격하게 설정함으로써 불필요한 조건의 실행을 방지하여 성능을 개선할 수 있습니다. 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 ‘1991-01-01’; ``` Short-Circuit Evaluation는 인덱스를 사용할 때 주의해야 할 점이 있습니다. WHERE 절에서 인덱스를 활용할 수 있다면 조건의 순서에 관계없이 인덱스를 사용하여 검색합니다. 그래서 인덱스를 사용할 경우 Short-Circuit Evaluation 를 고려하지 않아도 된다고 생각할 수 있습니다. 그러나 여러 조건 중 일부만 인덱스를 활용할 수 있는 경우, Short-Circuit Evaluation을 고려하여 인덱스를 사용하지 않는 조건을 앞에 배치함으로써 성능의 이점을 누릴 수 있습니다.