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초가 소요되었다고 한다.
반응형
'DB > MySQL' 카테고리의 다른 글
[MySQL 8.0] 중복된 인덱스 및 거의 사용되지 않는 인덱스 조회하기 (0) | 2024.02.07 |
---|