본문 바로가기

Mysql8

B-Tree 인덱스,구조 및 성능 고려사항 B-TreeB-Tree는 인덱싱 알고리즘 중 가장 보편적으로 사용되고, 가장 먼저 도입된 알고리즘이면서 여전히 가장 범용적인 목적으로 사용되는 인덱스 알고리즘 입니다. 그리고 B-Tree의 B는 Binary(이진)이 아닌, Balanced를 의미합니다. B-Tree는 칼럼의 원래 값을 변형시키지 않고 인덱스 구조체 내에서는 항상 정렬된 상태로 유지합니다.특별한 검색 조건이 없는 경우엔 대부분 B-Tree 또는 B+Tree를 사용합니다. B-Tree 인덱스 구조인덱스는 트리 구조로 되어 있으며, 루트 노드 → 브랜치 노드 → 리프 노드 순으로 구성됩니다. 리프 노드에는 실제 데이터를 가리키는 프라이머리 키 주소를 가지고 있습니다. 인덱스 자체는 데이터 테이블의 키 컬럼만을 포함하고, 실제 데이터는 별도로 .. 2025. 4. 25.
Index 인덱스란데이터베이스에서 데이터를 조회하려면, 기본적으로 테이블 전체를 훑는 전체 검색(Full Scan)을 수행해야 합니다.이는 시간이 오래 걸릴 수 있습니다. 그래서 등장한 것이 바로 인덱스입니다. 인덱스는 값(Key)과 데이터 주소(Value)의 쌍 (Key-Value Pair)로 구성되어 있으며, 원하는 데이터를 더 빠르게 찾을 수 있도록 돕는 구조입니다. 즉, 인덱스는 정렬된 찾아보기로 생각하면 됩니다. 인덱스 핵심 구조DB 인덱스는 보통 항상 정렬된 상태를 유지합니다.이를 위해 SortedList와 같은 자료구조가 활용되며, 이는 값을 삽입할 때마다 정렬을 유지하는 구조입니다.이 구조 덕분에 SELECT는 빠르지만, INSERT/UPDATE/DELETE는 느릴 수 있습니다. 인덱스의 장점과 단점.. 2025. 4. 23.
디스크 I/O 병목 DB가 느린 이유컴퓨터의 성능은 매년 빠르게 발전하고 있지만, 여전히 운영하는 시스템에서 가장 느린 부분은 디스크입니다.특히, DB의 성능 병목은 대부분의 디스크 I/O에서 발생합니다.결국, DB 성능 튜닝의 핵심은 디스크 I/O를 얼마나 줄일 수 있느냐에 달려 있다고 해도 과언이 아닙니다. 디스크 I/O가 병목인 이유CPU나 메모리는 전자 회로 기판의 장치이기 때문에, 나노초(ns) 단위로 연산과 접근이 가능합니다.하지만, 디스크는 여전히 기계적인 동작이 필요한 장치입니다. 특히 전통적인 하드디스크는 데이터를 읽기 위해 디스크 회전과 헤드 이동이라는 물리적 동작이 필요합니다. 이 물리적 구조 때문에, 데이터베이스 서버에서 디스크는 항상 병목 구간이 될 수밖에 없습니다.아무리 CPU가 빠르고 메모리가 넉.. 2025. 4. 22.
Master & Slave 구조 DB에 데이터를 쓰는 것과 데이터를 조회하는 부분을분리할 수는 없을까?  이번 글은 DB 아키텍처 중 Master-Slave 구조에 대해서 알아보겠습니다. Master-Slave 구조가 무엇일까요? Master-Slave 구조Master-Slave 구조는 하나의 Master DB와 하나 이상의 Slave DB로 구성된 아키텍처입니다.Master DB는 데이터를 저장 및 수정하는 역할, Slave DB는 Master DB의 데이터를 복제하고 읽기 전용으로 사용하는 역할입니다. MySQL 공식문서에 Replication은 이렇게 명시되어 있습니다.Replication enables data from one MySQL database server (known as a source) to be copied to.. 2025. 3. 4.
MySQL 구조와 동작 원리 MySQL은 어떤 구조를 가질까?  이 글은 Real MySQL 8.0을 참고하여 작성했으며, MySQL의 구조를 정리한 내용입니다.  MySQL은 어떠한 구조를 갖고 있을까요? MySQL 전체 구조 MySQL은 크게 MySQL엔진과 스토리지 엔진이 있습니다. 이를 합쳐서 MySQL 서버라고 부릅니다. MySQL엔진은 무엇일까요? MySQL 엔진MySQL 엔진은 MySQL 서버의 핵심 구성 요소로, 사용자가 실행한 SQL 쿼리를 해석하고 최적화하며, 적절한 스토리지 엔진을 통해 데이터를 저장하거나 조회하는 역할을 합니다. 이를 위해 MySQL 엔진은 여러 개의 내부 모듈로 구성되어 있습니다. 그림에서와 같이 커넥션 핸들러, SQL 인터페이스, SQL 파서, SQL 옵티마이저, 캐시 & 버퍼가 있습니다. .. 2025. 2. 18.
커버링 인덱스 & 성능 테스트 "DB에서 데이터 조회를 더 빨리하고 싶은데, 어떻게 하면 좋을까?"  이번 글은 데이터를 빠르게 조회할 수 있는 커버링 인덱스에 대해 소개하고, 직접 성능 테스트를 진행해 얼마나 빨라질 수 있는지 확인하는 글입니다. 먼저, 커버링 인덱스에 대해서 알아보도록 하겠습니다. 커버링 인덱스커버링 인덱스(Covering Index)는 쿼리에 필요한 모든 데이터를 인덱스 자체가 포함하고 있어, 테이블을 조회하지 않고 인덱스만으로 결과를 반환할 수 있는 인덱스를 의미합니다. 따라서 일반적인 인덱스보다 더욱 빠르게 데이터를 조회할 수 있습니다. "어떻게 인덱스로만 데이터를 반환하지?" 먼저, 인덱스가 동작하는 원리에 대해서 간단히 알아보도록 하겠습니다. 인덱스가 동작하는 원리를 그림으로 나타낸것은 다음과 같습니다.(.. 2025. 1. 30.
Index와 Query문 조건의 관계 "분명 Index를 생성했음에도 불구하고 왜 인덱싱이 되지 않는걸까?"Index는 어떻게 생성해야 할까?  "인덱스를 생성해도 인덱싱이 안되는 경우가 존재할까요?"네, 존재합니다. 제가 직접 겪은 문제입니다.먼저, 인덱스를 왜 사용하는지에 대해 간략히 짚고 넘어간 후, 왜 인덱스를 생성했음에도 인덱싱이 안됐는지에 대해 알아보겠습니다. 인덱스인덱스는 데이터베이스에서 검색 기능을 향상시키기 위해 사용되는 데이터 구조를 말합니다. 테이블의 데이터에 빠르게 접근하도록 돕는 일종의 색인 역할을 합니다. 쉽게 말해, 책의 목차를 생각하면 됩니다. 인덱스를 사용하지 않는 경우에는 찾고자하는 데이터가 존재하는 테이블을 Full Scan하여 조회에 더 많은 시간이 걸리게 됩니다.  예시 코드api를 호출하게되면, 이 코.. 2025. 1. 28.
[Mysql] 트랜잭션과 잠금 이번 글은 트랜잭션과 잠금에 대해서 알아보도록 하겠습니다. 트랜잭션트랜잭션은 하나의 논리적인 작업이 100% 적용(commit)이 되거나 100% 적용이 되지 않아야 함(rollback)을 보장해주는 것입니다.트랜잭션은 작업의 일부만 진행되는 현상(Partial update)를 발생하지 않게 만들어주어 작업의 완정성을 보장해 줍니다. 추가로, MySQL 서버에서 트랜잭션을 지원하는 엔진은 InnoDB 스토리지 엔진입니다. MyISAM과 MEMORY는 트랜잭션을 지원하지 않습니다. MySQL에서 트랜잭션트랜잭션은 논리적인 작업 셋 자체가 100% 적용(COMMIT)되거나 아무것도 적용되지 않음(ROLLBACK)을 보장해 줍니다. InnoDB 테이블과 MyISAM 테이블 차이를 알아보기 위해 아래 코드를 적.. 2024. 12. 11.