woowacourse-study / 2022-Real-MySQL

⚡️토르⚡️의 짜릿한 Real MySQL 뽀개기 🔨
9 stars 3 forks source link

유니크 인덱스를 설정하면 조회시 성능상 이점이!? #14

Open jurlring opened 2 years ago

jurlring commented 2 years ago

주제

컬럼을 유니크로 설정했을때, 인덱싱이 되기 때문에 조회시 성능상에 이점이 있다!

선정 이유

장바구니 미션을 하다가 아래와 같은 리뷰를 받았다. image

유니크 인덱스를 설정하면 조회시 성능상에 이점이 있다는 것을 처음 알게 되었는데 요리조리 검색해봐도 잘 나오지 않았다.

이번 장을 통해서 왜 그런지 알게 되어서 뿌듯해서 주제로 선정하였다 ㅎ.ㅎ

해당 텍스트

MySQL에서는 컬럼에 유니크 제약을 걸면 해당 컬럼에 인덱스가 수반된다.

알아본 결과, 유니크라서 더 조회가 빠르다기보단 인덱스가 수반되어서 더 빠른 것이였다! 👍

인덱스란?

인덱스가 필요한 이유

유니크 인덱스와 세컨더리 인덱스

프라임 키가 아닌데, 인덱싱을 한 것을 세컨더리 인덱스라고 한다. 프라임 키는 클러스터링이라던가 다른 추가되는 기능들이 많으므로, 이를 제외하고 세컨더리 인덱스와 유니크 인덱스를 비교해보자.

유니크 인덱스와 세컨더리 인덱스는 인덱스 구조상으로 아무런 차이점이 없다. 하지만 조회와 쓰기시엔 성능상의 차이가 있다.

유니크 인덱스는 세컨더리 인덱스보다 조회시 더 빠르다고 생각하지만 이는 정확히 말하면 틀리다. 인덱스를 읽는 것 자체는 시간이 같으나, 이는 유니크 인덱스는 따로 특별한 과정이 있는게 아니라 읽을 레코드 수가 적기 때문이다. 세컨더리 인덱스는 유니크 인덱스와 동일하게 디스크 읽기를 통해 데이터를 가져온 뒤, CPU에서 컬럼값을 비교하는 과정에서 좀 더 진행하나 해당 과정은 성능상에 영향이 거의 없다.

새로운 레코드가 추가되거나 인덱스 컬럼의 값이 변경될 때, 인덱스 쓰기 작업이 필요하다. 이 때, 유니크 인덱스의 경우 키 값을 쓸 때 중복된 값이 있는지 확인하는 과정이 추가로 필요하다. MySQL에서는 유니크 인덱스에서 중복된 값을 체크할 때 읽기 잠금을 사용하고, 쓰기를 할 때는 쓰기 잠금을 사용한다.

관련 페이지

277P~279P

HJ-Rich commented 2 years ago

주리링 잘했습니당 👍😄