DB

    [DB] MySQL 어댑티브 해시 인덱스

    [DB] MySQL 어댑티브 해시 인덱스

    🔍 어댑티브 해시 인덱스 일반적으로 인덱스를 생각하면 B-Tree 인덱스를 생각할 것이다. 하지만 여기서는 사용자가 수동으로 생성하는 인덱스가 아니라 InnoDB 스토리지 엔진에서 사용자가 자주 요청하는 데이터에 대해 자동으로 생성하는 인덱스이다. 사용자는 innodb_adaptive_hash_index 변수를 이용해서 어댑티브 해시 인덱스 기능을 활성화하거나 비활성화할 수 있다. ✏️ B-Tree의 한계 B-Tree는 실제 데이터가 리프 노드에 존재하기 때문에 특정 데이터를 찾기 위해 루트 노드 -> 브랜치 노드 -> 리프 노드의 경로를 거친다. 만약 검색 작업을 몇천 개의 스레드로 실행하면 CPU 사용량이 늘어나고 자연히 쿼리의 성능은 떨어진다. ✏️ 어댑티브 해시 엔덱스의 등장 어댑티브 해시 인덱스..

    [DB] MySQL 아키텍처: 스토리지 엔진

    [DB] MySQL 아키텍처: 스토리지 엔진

    🔍 스토리지 엔진 MySQL의 스토리지 엔진에서 가장 많이 사용되는 InnoDB에 대해서 알아보자. 앞으로 스토리지 엔진이라고 하면 InnoDB 스토리지 엔진이다. 다음은 InnoDB 스토리지 엔진의 아키텍처 도식도이다. 세부적으로 표현되어야 할 부분은 뒤에서 자세히 설명할 것이다. 🔍 InnoDB의 특징 ✏️ 프라이머리 키에 의한 클러스터링 InnoDB의 모든 테이블은 PK를 기준으로 클러스터링되어 저장된다. 클러스터링이란 특정 열의 값을 기준으로 데이터를 정렬하여 디스크 상에서 서로 인접하게 저장해주는 기술이다. 즉, InnoDB의 모든 테이블은 PK값을 기준으로 비슷한 값들이 모여 있다. 이는 범위 검색을 빠르게 처리할 수 있게 해준다. ✏️ MVCC(Multi Version Concurrency ..

    [DB] MySQL 아키텍처: MySQL엔진

    [DB] MySQL 아키텍처: MySQL엔진

    🔍 MySQL 아키텍처 MySQL의 아키텍처는 머리 역할을 하는 "MySQL 엔진"과 손 역할을 하는"스토리지 엔진"으로 나눠진다. MySQL 엔진은 요청된 SQL 문장을 분석, 최적화 하는 역할을 하며, 실제 데이터를 조작하는 작업은 스토리지 엔진이 전담한다. 사용자가 서버로 SQL 쿼리를 전달하면 서버는 다음과 같은 과정을 거친다. 대부분의 작업은 MySQL 엔진에 의해 처리되며, 마지막 단계인 데이터의 읽기/쓰기만 스토리지 엔진이 처리된다. SQL 파서 -> 옵티마이저 -> SQL 실행기 -> 데이터 읽기/쓰기 디스크 MySQL의 작동 MySQL엔진과 스토리지 엔진에 대해 공부하기 전에 MySQL 서버가 어떻게 작동하는지 알아보자. MySQL 서버는 스레드 기반으로 작동하며 크게 "포그라운드 스레드..

    [DB] 역 정규화

    [DB] 역 정규화

    역 정규화 중복을 없애기 위해서 정규화 과정들을 거쳤다면, 수많은 테이블이 생겼을 것이다. 여기서 성능적인 문제 때문에 효율을 높이기 위해서 중복을 일부로 만드는 것을 역정규화라고 한다. A 테이블의 K컬럼이 B테이블에서 많이 사용되고 있고, join연산 때문에 데이터가 너무 많은 경우 시스템 과부하가 생긴다. 따라서 이 k컬럼을 b테이블에도 만들어 중복을 허용한다. 이를 역 정규화라고 한다.

    [DB] BC 정규화

    [DB] BC 정규화

    A와 B가 C를 결정하기도 하지만 반대로 C가 결정되면 B가 결정되는 아이러니를 갖는다. 이 때는 B와 C를 따로 분리한 뒤에 C를 pk로 두고 b를 일반 컬럼으로 바꾼다. 또 다른 예제 D가 결정되면 C를 결정하고 있다.