1. 인덱스 (Index) ?
- 인덱스는 데이터베이스 테이블에 대한 검색 성능의 속도를 향상시켜주는 자료구조
- 특정 필드에 인덱스를 설정하면 해당 필드의 데이터들을 정렬하여
별도의 메모리 공간에 데이터 물리적 주소와 함께 저장
- 검색 할 때 조건으로 인덱스 필드로 사용할 경우 옵티마이저에서 판단하여 생성된 인덱스를 사용
인덱스를 사용하게 되면 인덱스에 저장되어있는 물리적인 주소에서 데이터를 가져와 동작하며 덕분에
검색속도를 항상 시켜줌
- 인덱스 생성 시 데이터를 오름차순으로 정렬하기 때문에 정렬된 주소체계라고 표현
2. 인덱스 장점
- 테이블 내 데이터가 쌓이게 되면 테이블 레코드(ROW)는 순서없이 뒤죽박죽으로 저장이 되는데
이렇게되면 특정 조건에 맞는 데이터를 찾을 때 레코드의 처음부터 끝까지 다 읽어 조건이 맞는지 비교
위와같은 경우를 풀 스캔(FULL SCAN) 이라고 함
- 인덱스를 사용할 경우에 인덱스 테이블 스캔(Index Table Scan) 을 하게 되는데
인덱스 테이블 스캔을 할 경우 인덱스 테이블은 미리 정렬되어 저장이 되어있기 때문에 해당 조건에 맞는
데이터를 빠르게 찾아낼 수 있음
- ORDER BY에 의한 정렬 과정을 피할 수 있음
-> 사용 시 정렬과 동시에 1차적 으로 메모리에서 정렬이 이루어지기 때문
- 인덱스는 이미 정렬되어 있어 데이터를 가져오기만 하면 됨
- MIN MAX 레코드의 시작값과 끝값만 가져오기 때문에 굳이 풀 스캔을 할 필요가 없음
3. 인덱스 단점
- 정렬된 상태를 계속 유지시켜줘야 하는 단점
- 레코드 내 데이터가 바뀌는 값이라면 악영향을 미침
- INSERT, UPDATE, DELETE 통해 데이터가 추가되거나 값이 바뀐다면 인덱스 테이블 내
값들을 다시 정렬해줘야 함 인덱스 테이블과 원본 테이블 두개 다 수정해줘야 함
- DML이 빈번한 테이블보다 검색위주로 테이블에 인덱스를 활용하는게 좋음
- 인덱스는 테이블의 전체 데이터 중 10 ~ 15 % 이하의 데이터를 처리하는데 효율적 그 이상은 사용하지 않는게 더 나음
- 적은 데이터를 가지고 있는 테이블에 굳이 인덱스를 사용할 필요 없음
- 인덱스 관리를 위해 데이터베이스 10% 저장공간이 별도로 필요
- 인덱스 무분별하게 많을 경우 데이터베이스의 성능 부하를 초래하게 됨
4. 옵티마이저
- 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심엔진
- DBMS의 두뇌
참고블로그
https://choicode.tistory.com/27
'MYSQL' 카테고리의 다른 글
sql_mode=only_full_group_by 에러 해결방법 (0) | 2023.04.26 |
---|---|
[MySql] SHOW PROCESSLIST (0) | 2022.10.11 |
대표적인 SQL 종류 (0) | 2022.07.14 |
트랜잭션 / 트랜잭션 격리수준 (0) | 2022.06.03 |
Preparedstatement 사용이유 (0) | 2022.05.17 |