DB(6)
-
한 테이블에 클러스터형 인덱스와 보조 인덱스가 동시에 있다면 어떤 구조일까?
이에 대하여 알기 위해서는 클러스터형 인덱스만 존재할 때 그리고 보조 인덱스만 존재할 때 어떤 구조로 페이지들이 만들어지는 지에 대해서 학습하여야한다. 클러스터형 인덱스 (Primary Index) 특정 데이터를 기준으로 정렬해주는 인덱스로, 데이터 페이지 전체가 이를 기준으로 정렬된다. 이는 아래와 같은 특성을 가지고 있다. 한개의 테이블에 한 개씩만 만들 수 있다. 보조 인덱스보다 검색 속도는 빠르지만, 입력/수정/삭제는 느리다. 위 그림에서 볼 수 있듯이 리프 페이지자체가 PK를 기준으로 정렬된 것을 알 수 있다. 또한, 리프 페이지가 (PK, 데이터) 형태이다. 보조 인덱스 (Secondary Index) 이 인덱스는 후보키에만 부여할 수 있으며, 데이터 페이지는 따로 정렬되지는 않고 인덱스를 위..
2023.09.07 -
MySQL이 인덱스를 이용하는 방법
인덱스를 잘 이용하려면 당연히 인덱스가 어떻게 실제 레코드를 읽어내는 지를 알아야한다. 이번 포스팅에서는 MySQL이 인덱스를 이용하는 대표적인 방법을 살펴보겠습니다. 인덱스 레인지 스캔 인덱스 레인지 스캔은 검색해야 할 인덱스의 범위가 결정됐을 때 사용하는 방식이다. SELECT * FROM employees WHERE first_name BETWEEN 'Ebbe' AND 'Gad'; 위 쿼리를 실행하면, first_name이 세컨더리 인덱스이기때문에 스캔해야할 위치 검색을 위한 비교작업을 수월하게 수행할 수 있다. (아래 그림의 두꺼운 선) 세컨더리 인덱스를 이용해 스캔 시작 위치를 결정하고, 그 지점부터 필요한 방향으로 인덱스를 읽어나가고 있다. 위 사진은 리프 노드에 저장된 (인덱스 키, PK)를..
2023.09.07 -
인덱스 키 값의 크기가 조회에 영향을 미치는 요소
인덱스의 키 값의 크기가 조회에 어떤 영향을 끼칠 수 있을까?? 이를 알기 위해서는 아래와 같은 배경지식이 필요하다. 디스크에 데이터를 저장하는 가장 기본 단위를 페이지라고 한다. 그리고, 페이지는 디스크와 메모리에 데이터를 읽고 쓰는 작업에 최소 단위가 된다. 한 페이지를 읽을 때마다 한 번의 디스크 I/O가 발생한다. 3 페이지를 읽어야된다면, 3번의 디스크 I/O가 발생! 같은 쿼리라면, 적게 읽을 수록 효율적 💡 그렇다면, 페이지에는 데이터들이 어떻게 저장되는 걸까?? 테이블에 데이터를 삽입하거나 업데이트하면 InnoDB는 데이터를 페이지 단위로 관리하며, 데이터들은 크기가 MySQL에서 정의한 페이지 크기까지 저장되었다가 만약 그 용량을 초과하면 새로운 페이지를 만들어 거기에 저장한다. 중간 결..
2023.09.05 -
H2 데이터베이스의 Connection mode
H2 데이터베이스 콘솔을 실행시켜보면, Save Settings에 Embedded와 Server라 써있는 것을 본적 있을 것이다. 그렇다면, Embedded와 Server는 각각 어떤 장단점이 있을까??? Embedded 모드 애플리케이션이 JDBC를 사용하여 동일한 JVM 내에서 데이터베이스를 연다. 이 방식의 특징은 다음과 같다. 가장 빠르고 쉬운 연결 모드이다. 한 번에 하나의 가상머신 및 클래스 로더에서만 열릴 수 있다. 다중 스레드 환경에서 동시에 여러 작업을 수행하기가 어렵다. 다중 스레드 환경은 동시에 여러 개의 스레드가 실행되는 환경인 데, 이를 쉽게 말해면 동시에 여러 작업이 처리된다. == 즉, 동시에 여러 요청이 들어온다! 애플리케이션의 스레드가 데이터베이스에 대한 입출력 작업을 수행..
2023.07.04 -
테이블 설계의 기본 정규화
테이블 설계 테이블은 어떤 공통된 속성을 가진 집합이다. 테이블 명은 집합 명사나 복수 명사가 되어야한다. 테이블은 현실 세계의 개념이나 집합을 나타낸 것이다. 공통된 속성들 중 선택되어야 하는 것은 가장 상위의 개념 집합이다. 아래의 경우 중 2번째가 더 효율적이다. → 테이블에 접근 VS where 구문 사용 회원을 등급(일반,프리미엄)으로 나누는 경우 → 일반 유저 테이블, 프리미엄 유저 테이블 회원에 등급 컬럼이 있는 경우 반드시 기본키를 설정할 것 결론 : 테이블이란 고유한 기본키를 가진 공통점에 의해 정의된 것들의 집합이다! 정규형 정규형은 데이터의 갱신이 발생한 경우에도 부정합이 발생하기 어려운 테이블의 형태이다. 제 1 정규형(1NF) 제 1 정규형의 정의는 ‘테이블 셀에 복합적인 값을 포..
2023.06.27 -
mysql - 인덱스에 대하여
인덱스란? 데이터를 빠르게 찾을 수 있도록 도와주는 도구이다. 클러스터형 인덱스 : 기본 키로 지정하면 클러스터형 인덱스가 생성되고 해당 열로 자동 정렬된다. 보조 인덱스 : 고유 키로 지정하면 보조 인덱스가 생성되고 자동 정렬되지 않는다. 인덱스 생성 create [UNIAUE] index 인덱스_이름 on 테이블_이름(열_이름) 인덱스 제거 drop index 인덱스_이름 on 테이블_이름 인덱스의 내부 구조 : 인덱스는 균형 트리의 자료 구조로 구성되어있다. 균형 트리 구조에서 데이터가 저장되는 공간을 노드라고 한다. MySQL에서 노드는 페이지라고 부릅니다. use market_db; create table cluster (mem_id char(8), mem_name varchar(10)); in..
2022.07.05