DB/MySQL

MySQL where문에서 boolean 체크 관련 성능 튜닝

검정비니 2024. 1. 17. 12:24
728x90
반응형

MySQL에서 boolean 타입의 플래그를 추가하기 위해 보통 BOOLEAN 타입을 사용하게 된다.

이 boolean 타입은 사실 tinyint(1)과 유의하다고 볼 수 있다.

 

MySQL에서 제공해주는 false나 true와 같은 상수를 사용해서 where문에 조건을 추가해 줄 수가 있게 된다.

이 불린 값 체크를 위해서 아래와 같이 많은 방법이 있을 수 있다:

-- is문 사용
SELECT * FROM TABLE WHERE flag is true;

-- boolean값 자체를 조건문으로 사용
SELECT * FROM TABLE WHERE flag;

-- '='을 사용해서 값을 비교
SELECT * FROM TABLE WHERE flag = true;

 

논리적인 관점에서 위의 3가지 타입의 쿼리는 모두 동등해 보이지만, 실제로 서비스에 적용해보면 '='을 사용한 쿼리가 더 효율적으로 동작하는 것을 확인할 수가 있었다.

EXPLAIN 문을 사용해서 실험을 진행해 본 결과, "WHERE flag is true"나 "WHERE flag"는 full scan을 사용해서 데이터를 찾는 반면, "WHERE flag = true"의 경우에는 key lookup 방식으로 동작하는 것을 확인할 수 있었다.

 

스택오버플로우에 따르면 3천만개의 row에 대해 "is true"는 약 1.121초가 걸린 반면"where flag = true"는 약 0.167초가 소요되었다고 한다.

 

반응형