인덱스는 추가적인 쓰기작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다.
RDBMS에서 검색속도를 높이기 위한 기술이다.
Table의 Column을 색인화 한다. (따로 파일로 저장한다.)
DBMS는 index를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다.
인덱스가 적용된 Column에 INSERT, UPDATE, DELETE가 수행된다면 다음과 같은 연산을 추가적으로 해주어야 한다.
Table을 생성하면 MYD, MYI, FRM 3개의 파일이 생성된다.
Index를 사용하지 않는 경우, MYI 파일은 비어져 있다.
인덱싱하는 경우, MYI파일이 생성된다.
이후 사용자가 Select 쿼리로 Index를 사용하는 Column을 탐색시 MYI파일의 내용을 검색한다.
CREATE, DELETE, UPDATE가 빈번한 속성에 인덱스를 걸게 되면 인덱스의 크기가 비대해져 성능이 오히려 저하될 수도 있다.
사용하면 좋은 경우
1. Where절에서 자주 사용되는 Column
2. 외래키가 사용되는 Column
3. Join에 자주 사용되는 Column
Index 사용을 피해야 하는 경우
1. Data 중복도가 높은 Column
2. DML(데이터 조작 언어 : Data Manipulation Language)이 자주 일어나는 Column
새로운 Block을 할당받은 후 Key를 옮기는 작업을 수행한다.(많은 양의 Redo가 기록되고 유발된다.)
Index split 작업동안 해당 Block의 Key값에 대해서 DML이 블로킹된다.(대기 이벤트 발생)
Table의 Data수와 Index의 Data수가 다를 수 있다.
https://gyoogle.dev/blog/computer-science/data-base/Index-.html
https://mangkyu.tistory.com/96