RDMBS에서 검색 속도를 높이기 위한 기술
두꺼운 책의 목차와 같다고 보면 된다.
데이터베이스 안의 레코드를 full scan을 때리지 않고, B+ Tree로 구성된 구조에서 Index 파일 검색으로 속도를 향상시키는 기술이다.
테이블 생성 시 다음과 같은 파일들이 생성된다.
여기서 사용자가 쿼리를 통해 Index를 사용하는 칼럼을 검색하게 되면, 이때 MYI 파일의 내용을 사용한다.
INSERT
index split 현상 발생 가능(인덱스의 block들이 하나에서 두 개로 나누어지는 현상)
인덱스는 데이터가 순서대로 정렬되어야 하는데, 기존 블록에 여유 공간이 없는 상황에서 그 블록에 새로운 데이터가 입력되면 기존 블록의 내용 중 일부를 새 블록에다가 기록한 후 기존 블록에 빈 공간을 만들어서 새로운 데이터를 추가하게 된다(성능면에서 매우 불리)
index split은 새로운 블록을 할당 받고 key를 옮기는 작업을 수행한다. 그 수행 과적이 redo에 기록되고 많은 양의 redo를 유발한다.
index split이 이루어지는 동안 해당 블록에 대해 키 값이 변경되면 안되므로 DML이 블로킹된다.
DELETE
- 테이블에서 데이터가 DELETE될 경우 : 지워지고 다른 데이터가 그 공간을 사용 가능
- index에서 데이터가 DELETE될 경우 : 데이터가 지워지지 않고 사용은 되지 않는다.
- 테이블에 데이터가 1만건 있는 경우, index에는 2만건이 있을 수 있다.
UPDATE
- index에는 UPDATE 개념이 없다.
- 테이블에 UPDATE가 발생할 경우 index에서는 DELETE가 먼저 발생한 후 새로운 작업의 INSERT 작업이 발생한다. DELETE와 INSERT 두개의 작업이 인덱스에 동시에 일어나게 되어 오히려 더 큰 부하를 일으키게 된다.
갑자기 인덱스를 추가하게 되면 잘 작동하던 쿼리에 옵티마이저(SQL을 어떤 식으로 실행할지 계획해 주는 DBMS 소프트웨어)가 실행 계획을 바꾸는 경우가 생겨 갑자기 아주 느려질 때가 있다.
B-Tree Index
Full-Text Index
CHAR
, VARCHAR
, TEXT
컬럼에만 적용 가능ALTER TABLE ratings
ADD FULLTEXT INDEX index_full_text (comment);
SELECT * FROM ratings
WHERE MATCH(comment) AGAINST('라떼는 말이야');
Hash Index
Adoptive Hash Index
가 구현되어 있다.Bitmap Index