Study/Real-MySQL

8.9 유니크 인덱스

hongeeii 2024. 1. 5. 16:52
728x90
반응형

8.9 유니크 인덱스


8.9.1 유니크 인덱스와 인반 세컨더리 인덱스의 비교

인덱스의 구조상 아무런 차이점이 없다.

읽기와 쓰기 성능 관점에서 살펴보자.


8.9.1.1 인덱스 읽기

유니크 인덱스가 세컨더리 인덱스보다 더 빠른가?

nope. 유니크 하지 않은 세컨더리 인덱스는 중복된 값이 허용되므로

읽어야할 레코드가 많아서 느린 것이지 인덱스 자체의 특성때문에 느린것이 아님.

하나의 값을 검색할 경우, 실행계획이 다르긴 하지만 인덱스의 성격이 유니크한지 아닌지의 차이일 뿐 큰 차이는 없다

읽어야할 레크드 수가 같다면 성능 차이는 미미하다.


8.9.1.2 인덱스 쓰기

유니크 인덱스의 키 값을 쓸 때는 중복된 값이 있는지 체크하는 과정이 더 필요함.

=> 세컨더리 인덱스 쓰기 보다 느림

유니크 인덱스 중복값 체크 시 읽기 잠금 발생

쓰기 할 때는 쓰기 잠금 발생

=> 데드락이 빈번히 발생.

InnoDB는 인덱스 키의 저장을 버퍼링 하기 위해 체인지 버퍼를 사용함.

인덱스 쓰기 작업이 빨리 처리되지만 유니크 인덱스는 반드시 중복 체크를 해야 하므로

작업 자체를 버퍼링 하지 못함.

=> 유니크 인덱스가 세컨더리 인덱스보다 변경 작업이 느림




8.9.2 유니크 인덱스 사용 시 주의 사항

꼭 필요하다면 당연히 추가하지만 성능을 기대하며 생성하는 것 X

유니크 인덱스는 일반 인덱스와 같은 열할을 하므로 중복해서 한 컬럼에 생성할 필요 X

유니크 인덱스는 쿼리 실행계획과 테이블 파티션에 영향을 미침(10장 '실행계획', 13장 '파티션' 에서..)

=> 유일성을 보장할 필요 없으면 세컨더리 인덱스를 고려해보자.

728x90
반응형