데이터베이스 19

[MySQL] 복합 인덱스와 커버링 인덱스

MySQL 에서 복합 인덱스를 걸었을 때 실제로 인덱스를 타는건 어떤 상황에 탈까? 1. 테이블 & 인덱스 mysql> desc review; +----------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------+--------------+------+-----+---------+-------+ | id | bigint | NO | PRI | NULL | | | review_content | varchar(255) | YES | | NULL | | | seq | bigint | YES | MUL | NULL | | | store_id | bi..

데이터베이스 2023.01.26

[MySQL] R-Tree Index 와 공간 탐색

MySQL 8.0 기준으로 작성한 글입니다. 이 글에서는 MySQL 의 R-Tree 에 대한 개념만 정리합니다. 1. R-Tree R-Tree 는 점, 선, 면(다각형)과 같은 다차원 정보를 효율적으로 저장하기 위한 트리 형태의 자료구조 입니다. 보통 지도에서 좌표, 거리, 지역의 윤곽선 등을 저장하여 해당 개체를 더 빠르게 쿼리하는 목적으로 사용됩니다. (예를 들면 "현재 위치로부터 1km 이내의 식당들 검색") 1.1 MBR : 최소 경계 사각형 R-Tree 의 핵심은 MBR(최소 경계 사각형) 입니다. MBR 은 Minimun bounding rectangle 로 특정 도형을 감싸는 최소 크기의 사각형을 의미합니다. 하나의 도형뿐만 아니라 근처의 도형도 함께 감싸는 저장방식을 통해 도형의 포함 관계..

데이터베이스 2022.11.15

9. 옵티마이저와 힌트

1. 개요 옵티마이저는 DBMS 에서 가장 복잡한 부분입니다. 그래서 옵티마이저가 만들어 내는 실행 계획을 이해하는 것 또한 상당히 어렵습니다. 하지만, 실행 계획을 이해할 수 있어야 불합리한 부분을 찾아 최적화할 수 있습니다. 먼저, 아래에서 실행 계획을 이해하기 위해 필요한 내용들을 짚고 넘어가겠습니다. 1.1 쿼리 실행 절차 1. SQL 파서 가 SQL 문장을 분석하여, 파스 트리 를 만들어 낸다. 1번 작업은 MySQL 의 SQL 파서(쿼리 파서) 에서 실행됩니다. 2. 파스 트리 를 확인하며 테이블을 읽고, 어떤 인덱스를 이용할지 선택한다. 2번 작업은 옵티마이저 가 실행하고, 이때 결정된 사항들이 실행 계획입니다. 3. 2번째 단계에서 결정된 테이블 읽기 순서나, 선택된 인덱스를 통해 스토리지..

데이터베이스 2022.06.14

8. 인덱스 (2)

4. R-Tree 인덱스 MySQL 에는 공간 인덱스(Spatial Index) 라는 개념이 있습니다. 2차원의 데이터를 인덱싱하고, 검색하는 목적의 인덱스 입니다. 기본적인 내부 메커니즘은 B-Tree 와 흡사하지만, B-Tree 는 1차원의 스칼라 값* 차이점은 2차원 공간 개념 값을 저장한다는 것입니다. 스칼라 값 크기, 양만을 나타내는, 숫자로만 표시되는 값을 의미합니다. 예) 우유 1팩의 용량, 비행기의 무게 등 MySQL 은 공간 데이터를 다룰 수 있는 공간 확장(Spatial Extention)을 제공하는데 다음과 같은 기능들이 있습니다. 공간 데이터를 저장할 수 있는 데이터 타입 공간 데이터 검색을 위한 공간 인덱스 (R-Tree 알고리즘) 공간 데이터의 연산 함수 (거리 또는 포함 관계의..

데이터베이스 2022.06.08

8. 인덱스 (1)

1. 디스크 읽기 방식 CPU나 메모리 처럼 전기적 특성을 띄 장치와 HDD, SDD 같은 기계식 장치는 처리속도 차이가 아주 많이 납니다. 그래서 쿼리의 성능을 좌우하는 것은, 어떻게 디스크 I/O 를 줄이느냐가 핵심이라고 합니다. 그러기 위해서는 먼저 디스크에 대해 살짝 짚고 넘어가야 합니다. 1-1. HDD 와 SSD 위는 컴퓨터 주요 장치들의 처리 속도 차트입니다. 기본적으로 CPU 의 처리속도는 SSD, HDD 에 비해 월등히 빠른 것을 보실 수 있습니다. SSD 의 장점은 기존 HDD 보다 랜덤 I/O 가 훨씬 빠르다는 것 입니다. 그래서 DBMS 와 같이 순차 I/O 보다 랜덤 I/O 가 훨씬 더 자주 일어나는 환경에서는 SSD 가 적합합니다. 1-2. 랜덤 I/O 와 순차 I/O 데이터 페..

데이터베이스 2022.05.31

5. 트랜잭션과 잠금

Real MysQL 8.0 1권을 읽고 정리한 내용입니다. 잘못된 내용이 있을 경우 댓글로 남겨주시면 감사하겠습니다🙏 트랜잭션 논리적인 작업셋이 모두 처리되거나, 모두 처리되지 않는 기능입니다. 이로서, 작업의 완전성을 보장해주게 됩니다. ACID 라는 트랜잭션이 안전하게 수행된다는 것을 보장하는 성질이 있습니다. Atomic : 원자성, 트랜잭션 내의 작업들은 모두 성공하거나, 모두 실패함 Consistency : 일관성, 데이터의 일관성(무결성)을 보장해야함 Isolation : 독립성(상호배제성), 다른 트랜잭션의 영향을 받지 않아야함 Durability : 지속성, 성공하면 영구적으로 반영되고 장애시에도 데이터 정합성에 문제가 없어야 함 MySQL 에서의 트랜잭션 트랜잭션은 여러개의 변경 작업들이..

데이터베이스 2022.05.24

[MySQL] 4. 아키텍처(2)

Real MysQL 8.0 1권을 읽고 정리한 내용입니다. 잘못된 내용이 있을 경우 댓글로 남겨주시면 감사하겠습니다🙏 InnoDB 스토리지 엔진 아키텍처 MySQL 의 스토리지 엔진 중 가장 많이 사용되는 InnoDB 스토리지 엔진은 위와 같은 구조로 되어있습니다. InnoDB 는 MySQL 에서 사용할 수 있는 스토리지 엔진 중에서 거의 유일하게 record lock 을 제공합니다. 그래서 높은 동시성 처리가 가능하고, 성능이 뛰어납니다. 프라이머리 키에 의한 클러스터링 InnoDB 의 모든 테이블은 프라이머리 키(PK)를 기준으로 클러스터링 되어 저장됩니다. 즉, 테이블의 레코드들은 디스크에 PK 의 순서대로 저장된다는 뜻 입니다. 그리고 세컨더리 인덱스*는 레코드의 주소 대신, PK 값을 논리적인 ..

데이터베이스 2022.05.16

[MySQL] Transaction Isolation level

MySQL 8.0 을 기준으로 작성되었습니다. Transaction Isolation level Transaction Isolation level 이란 다른 Transaction 에서 접근해 데이터를 변경하거나 조회할 수 있도록 하는 수준입니다. 예를들어 현재 실행중인 Transaction_A, 그 다음 실행된 Transaction_B 가 있다고 가정하겠습니다. Transaction_A 의 격리 수준을 높이면 Transaction_B 가 방해할 여지가 줄어들게 됩니다. 그러면 데이터의 일관성(Consistency)이 높아집니다. 하지만 Transaction_A 가 끝날때까지 Transaction_B 는 대기해야합니다. 그래서 동시성(Concurrency) 은 감소합니다. 반대로 Transaction_A ..

데이터베이스 2022.05.12

[MySQL] 4. 아키텍처(1)

Real MysQL 8.0 1권을 읽고 정리한 내용입니다. 잘못된 내용이 있을 경우 댓글로 남겨주시면 감사하겠습니다🙏 MySQL 엔진 아키텍처 MySQL 의 내부에서 사용되는 엔진은 사람의 머리에 해당하는 MySQL 엔진 과 손발에 해당하는 스토리지 엔진 이 있습니다. MySQL 엔진 커넥션 핸들러 : 클라이언트로부터의 접속 요청 처리 SQL 파서 & 전처리기 : 쿼리 요청 처리 옵티마이저 : 쿼리 최적화 스토리지 엔진 MyISAM InnoDB 특징 지원하는 기능이 많지 않아, 구조가 단순함 지원하는 기능이 많아 구조가 복잡하고, 자원을 많이 사용함 기능 지원 Full-text 인덱싱 가능 인덱싱(Full-text 인덱싱 포함), 외래키, 제약조건, 동시성제어, 트랜잭션 지원 Lock 단위 Table l..

데이터베이스 2022.05.10