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

들어가며 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...

Real MySQL 8.0 : 11장 쿼리 작성 및 최적화 (2) - SELECT 들어가며 SELECT 문은 데이터베이스에서 가장 많이 사용되는 SQL 문이다. 단순히 데이터를 조회하는 것처럼 보이지만, 내부적으로는 여러 단계의 처리 과정을 거치며 인덱스 활용 여부에 따라 성능이 크게 달라진다. 이번 글에서는 Real MySQL 8.0 2권 11장...

3장 : 레디스 기본 개념 들어가며 레디스는 단순한 키-값 저장소가 아니다. 다양한 자료 구조를 지원하는 데이터 구조 서버 라고 표현하는 것이 더 정확하다. 기존의 키-값 저장소가 문자열 키와 문자열 값만을 연결했다면, 레디스는 String, List, Hash, Set, Sorted Set 등 복잡한 자료 구조를 지원한다. 이번 장에서는 레디스...

Real MySQL 8.0 : 11장 쿼리 작성 및 최적화 들어가며 MySQL에서 SQL을 작성할 때, 단순히 문법만 맞추면 되는 것이 아니다. MySQL 서버의 설정에 따라 대소문자 구분, 문자열 표기 방법, 날짜 형식 등이 달라지며, 이러한 시스템 변수들을 이해하지 못하면 예상치 못한 동작이나 오류를 마주하게 된다. 11.1 쿼리 작성과 ...