인덱스란? 말 그대로 색인이라고 할 수 있다. DBMS도 데이터베이스 테이블의 모든 데이터를 검색해서 원하는 결과를 가져 오려면 시간이 오래 걸리기 때문에 칼럼의 값과 해당 레코드가 저장된 주소(row_id)를 키와 값의 쌍으로 인덱스를 만들어 두는 것이다.
B+-Tree
알고리즘이다. 모든 컬럼에 INDEX를 생성해두면 빨라지지 않을까?
👉 NOPE
!
🙅🏻
INSERT
인덱스에 대한 데이터도 추가해야 하므로 성능에 손실이 따른다.DELETE
인덱스에 존재하는 값은 삭제되지 않고 사용하지 않는다는 표시 즉, row의 수는 그대로 남게된다.UPDATE
의 경우 위 두가지 문제점을 동시에 수반한다.ex
10,000 레코드에 해당하는 테이블에 대해 2,000 단위로 인덱스를 생성할 경우 값의 range가 적은 필드는 인덱스를 읽고 다시 한번 디스크 I/O가 발생하기 때문에 비효율적이다.