
MySQL TINYINT
들어가며 MySQL에서 BOOLEAN 타입을 사용해본 적이 있는가? 아마 대부분의 개발자가 “있다”라고 답할 것이다. 하지만 MySQL에는 진짜 BOOLEAN 타입이 존재하지 않는다. CREATE TABLE test ( is_active BOOLEAN ); SHOW CREATE TABLE test; -- 결과: CREATE TABLE `...

들어가며 MySQL에서 BOOLEAN 타입을 사용해본 적이 있는가? 아마 대부분의 개발자가 “있다”라고 답할 것이다. 하지만 MySQL에는 진짜 BOOLEAN 타입이 존재하지 않는다. CREATE TABLE test ( is_active BOOLEAN ); SHOW CREATE TABLE test; -- 결과: CREATE TABLE `...

들어가며 이 글은 Real MySQL 8.0의 13장 파티션을 읽고 정리한 내용이다. 파티션의 개념, 내부 동작 원리, 주의사항, 그리고 각 파티션 종류별 특징을 다룬다. 파티션은 하나의 테이블을 물리적으로 여러 개로 분리하여 저장하는 기법 이다. 논리적으로는 하나의 테이블이지만, 내부적으로는 파티션 키를 기준으로 데이터가 나뉘어 ...

들어가며 서비스를 운영하다 보면 테이블에 데이터가 수천만, 수억 건씩 쌓이게 된다. 이렇게 테이블이 커지면 쿼리 성능이 떨어지고, 오래된 데이터를 정리하는 것도 쉽지 않다. 이런 상황에서 고려해볼 수 있는 것이 파티셔닝 이다. 파티셔닝이란 파티셔닝은 하나의 큰 테이블을 작은 단위로 나누어 관리하는 기법 이다. 논리적으로는 하나의 테이블이지만,...

들어가며 Real MySQL 8.0을 공부하면서 MySQL의 공간 검색 기능을 살펴봤다. ST_Distance_Sphere, ST_Contains, 공간 인덱스 등 MySQL도 나름 위치 기반 검색을 지원하지만, 찾아보니 위치 기반 서비스에 특화된 도구들 이 따로 있었다. 바로 Redis Geo 와 PostGIS 다. 여러 블로그와 벤치마크를 찾아...

들어가며 MySQL에서 쿼리를 작성했다면, 그 성능을 정확하게 측정하는 것이 중요하다. 하지만 쿼리 성능 테스트는 생각보다 많은 변수가 존재한다. 운영체제 캐시, 버퍼 풀, 네트워크 등 다양한 요소가 쿼리 실행 시간에 영향을 미치기 때문이다. 이번 글에서는 쿼리 성능 테스트 시 고려해야 할 요소 들을 살펴보고, MySQL의 강력한 확장 검색 기능인...

들어가며 MySQL에서 JOIN UPDATE는 다른 테이블의 데이터를 참조하여 특정 테이블을 업데이트할 때 사용하는 강력한 기능이다. 그런데 여기에 GROUP BY를 사용하려 하면 갑자기 문법 오류가 발생한다. 왜 그럴까? 이번 글에서는 JOIN UPDATE에서 GROUP BY가 왜 안 되는지, 그리고 이 문제를 해결하기 위한 파생 테이블 , STR...

들어가며 SELECT 문은 데이터를 조회하는 데 사용되지만, 실제 서비스에서는 데이터의 생성, 수정, 삭제가 빈번하게 발생한다. INSERT, UPDATE, DELETE는 데이터를 변경하는 DML(Data Manipulation Language)로, 잘못 사용하면 성능 저하는 물론 데이터 무결성에도 심각한 영향을 줄 수 있다. 이번 글에서는 Real...

들어가며 Real MySQL 8.0 2권 11장에서는 쿼리 작성과 최적화에 대해 다룬다. 이 글에서는 그중 11.4.10 서브쿼리, 11.4.11 CTE(Common Table Expression), 11.4.13 잠금을 사용하는 SELECT를 정리한다. 서브쿼리는 MySQL 5.5 이하에서 성능이 좋지 않아 기피 대상이었지만, MySQL 8.0에...

들어가며 Real MySQL 8.0 11.4.13 "잠금을 사용하는 SELECT" 를 읽다 보면, 선착순 쿠폰 발급 시 동시에 1000개의 요청이 들어오는 상황을 예로 들며 NOWAIT과 SKIP LOCKED를 설명한다. 책에서는 간단히 언급하고 넘어가지만, 실제로 이 문제를 해결하려면 상당히 깊은 이해가 필요하다. 특히 배달, 커머스 기업 등에서...

지연된 조인 드라이빙 테이블만으로 필요한 데이터를 먼저 필터링한 후, 최소한의 레코드로만 조인을 수행하는 기법이다. 조인을 사용하는 쿼리에서 GROUP BY, ORDER BY, LIMIT 등이 함께 사용될 때 성능을 높이기 위해 조인을 최대한 늦추고 필요한 데이터만 먼저 필터링한다. 같은 결과를 반환하는 두 쿼리를 예시로 진행해보자. S...