BACKEND/Database(23)
-
LATERAL JOIN, 어렵지 않게 사용하기
본 포스팅은 LATERAL JOIN을 이해하고 실습해보기 위한 포스팅입니다. LATERAL JOIN 은 PostgreSQL, Oracle, DB2, MS SQL 등에서 사용될 수 있지만, 잘 알려지지는 않은 기능입니다. 최근 쿼리를 작성하면서 LATERAL JOIN 기능을 사용할 일이 있었는데요. LATERAL JOIN 으로 어떤 것들을 할 수 있을지 잘 파악한다면, 꽤 유용한 기능이라고 생각이 들어 글을 작성해보고자 합니다. 내용을 살펴보기 전에, SQL의 기본적인 SELECT 와 FROM 구문을 생각해봅시다. SELECT FROM ; 기본적으로, 위 코드는 루프를 돌며 데이터를 가져오는 것을 알 수 있는데요. 마치 아래와 같은 pseudo 코드와 같이 생각할 수 있습니다. for x in tab lo..
2023.11.28 -
MySQL Partition, 제대로 사용하기 (2)
MySQL의 Parition 의 사용법을 알아보며 실제 저장 과정을 분석하는 것이 본 포스팅의 목표입니다. 지난 포스팅 MySQL Partition, 제대로 이해하기 (1)에 이어 이번 포스팅은 Parition의 사용법에 대해 다루고자 합니다. Partition이란 논리적으로 하나의 테이블이지만 실제로는 여러 개의 테이블로 분리해서 관리하는 기능입니다. 마치 동일한 형식의 한 개의 테이블을 사용하고 있는 것 같지만, 실제적으로는 여러 개의 물리 파일로 데이터들을 분할하여 보관하는 방식입니다. 이번 포스팅에서는 파티션을 적용하는 방식과 데이터들의 실제 물리적인 저장 과정을 살펴보겠습니다. Create Patition 파티션을 생성하는 구문은 아래와 같습니다. CREATE TABLE table_name PA..
2022.09.07 -
MySQL Partition, 제대로 이해하기 (1)
MySQL의 Parition 개념과 특징을 알아보는 것이 본 포스팅의 목표입니다. 안녕하세요. 이번 포스팅은 Parition에 대해 다루고자 합니다. Parition은 대용량 데이터를 처리해야한다면 반드시 알아둘 필요가 있습니다. 이번 포스팅에서는 전반적인 이해와 원리를 다루며, 이어지는 포스팅 MySQL Partition, 제대로 사용하기 (2) 에서 실제 사용법에 대해 다룹니다. 해당 포스팅의 모든 도식은 직접 그린 것으로 출처를 명시하셔야 합니다. Partition? Partition이란 논리적으로 하나의 테이블이지만 실제로는 여러 개의 테이블로 분리해서 관리하는 기능입니다. 마치 동일한 형식의 한 개의 테이블을 사용하고 있는 것 같지만, 실제적으로는 여러 개의 물리 파일로 데이터들을 분할하여 보관..
2022.09.06 -
MySQL Architecture, 제대로 이해하기
MySQL Server의 구조를 파악하는 것이 본 포스팅의 목적입니다. MySQL Architecture TLDR; MySQL 서버는 크게 MySQL Engine과 Storage Enigne으로 구분할 수 있습니다. ✔️ MySQL Engine: 요청된 SQL 문장을 분석하거나 최적화 등 처리. 논리적인 면에서 두뇌의 역할 ✔️ Storage Engine: 손발 역할. 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어옴 여기서 중요한 점은 하나의 쿼리 작업은 여러 하위 작업으로 나뉘는데, 각 하위 작업이 MySQL 엔진 영역에서 처리되는지 아니면 스토리지 엔진 영역에서 처리되는지 구분할 줄 알아야 한다는 점입니다. Big Picture 위의 그림을 위에서 부터 살펴보면 Cli..
2022.08.21 -
Paging Optimization - Covering Index
Paging 시 성능 개선을 위해 No Offset 방식과 Covering Index를 활용하는 것이 해당 포스팅의 목표입니다. 지난 포스팅은 Covering Index에 대해 다뤘습니다. 이번 포스팅은 이 Covering Index를 사용해서 성능을 개선하는 방법에 대해 다루고자 합니다. 데이터베이스 성능 개선이기 때문에 Spring 뿐만 아니라 모든 곳에서 활용할 수 있습니다. Paging 일반적인 웹 서비스에서 Paging은 아주 흔하게 사용되는 기능입니다. 간혹 Paging과 Pagination이라는 단어를 둘 다 확인 할 수 있는데요. 궁금해서 찾아보았는데, 아래와 같은 뜻을 가진다고 합니다. Pagination는 "act of creating pages for a document, book, ..
2022.08.01 -
Covering Index, 성능 테스트
MySQL에서 성능 개선을 위해 Covering Index가 무엇인지, 추가로 그 배경 지식인 Index와 관련된 내용을 살피는 것이 해당 포스팅의 목표입니다. 안녕하세요. 이번 포스팅에서는 MySQL의 Covering Index에 대해 다루고자 합니다. Covering Index를 이해하기 위해서는 MySQL의 Index 구조와 Execution Plan 지식이 요구됩니다. Execution Plan에 대한 이해는 'SQL Execution Plan, 제대로 이해하기'을 참고하실 수 있고, Index와 관련된 내용은 'MySQL Index, 제대로 알아보기'을 참고하실 수 있습니다. B-Tree MySQL의 InnoDB는 기본적으로 인덱스를 B$^+$-Tree의 자료구조로 생성합니다. B$^+$-Tre..
2022.07.27