작성
·
122
·
수정됨
0
인덱스를 걸때 카디널리티 수치를 확인해 높은 컬럼을 인덱스로 설정하라고 강의에서 들었습니다. 이에 궁금한 점이 몇가지 있습니다.
Q1 : WHERE 절에 검색조건으로 사용되는 컬럼이 5가지라고 가정하면 가장 카디널리티가 높은 컬럼 1개만 인덱스로 걸어야 하나요?? 아니면 카디널리티가 높은 순서대로 묶어서 하나의 복합 인덱스를 만들어 주어야 하나요?? 차이점이 궁금하고 어떤 방식이 더 나은 방식인지 궁금합니다
Q2 : WHERE 절에 사용되는 검색조건인 컬럼 한개가 있다고 가정했을때 해당 컬럼의 카디널리티 수치가 낮더라도 인덱스를 만드는게 낫지 않나요?
Q3 : Mysql의 경우 범위검색의 경우 B-Tree 인덱스를 사용한다고 알고있습니다 . 강의에서 만든 인덱스도 날짜이고 범위검색이니 B-Tree 인덱스를 사용한거 같습니다. 정확한 일치 검색의 경우 해시 인덱스를 사용할 수 있다고 들었습니다. 이때는 인덱스를 만들때 코드를 어떻게 써줘야 해시 인덱스를 만들 수 있나요?
답변 2
1
A1:
공식이 있기보다는 상황에 맞게 선택을 하셔야 되는데요.
저라면 이와 같은 방식으로 시도를 할 거 같습니다.
1.5개의 칼럼중에 카디널리티가 높은 단일 칼럼을 기준으로 단일 인덱스 생성
2.원하는 성능까지 나오는 체크
3.원하는 성능이 나온다면 여기 stop
4.아직 원하는 기준만큼 성능이 안나온다면 다른 칼럼들을 하나씩 추가하여 결합인덱스를 생성
5.결합인덱스를 통해 원하는 기준에 도달하였다면 stop
6.결합인덱스를 사용했는데도 아직 충분하지 않다.
7.DB단이 아닌 어플리케이션 단에서 개선 할 수 있는 포인트 찾기.
처음부터 결합인덱스를 생성하면 되는 이렇게 번거롭게 간 이유는 인덱스,결합인덱스의 단점 체크해주세요.
+ 결합인덱스 생성시 주의사항도 같이 체크해주세요.
면접대비 목차에서 언급 했던 주제이기 때문에 직접 찾아보고 공부 하시라고 언급만 해두었습니다.
A2:
2번 질문에 대한 답변도 상황에 맞게 선택한다가 제 생각입니다.
인덱스를 추가했을때 성능이 확실히 개선 됐는지 체크해보기.
실행계획을 통해 인덱스를 잘타고 있는지.
카디널리티 수치가 낮지만 인덱스를 추가함 로서 제가 원하는 기준에 성능까지 나오고 인덱스를 잘타고있다면 저라면 생성합니다.
0
3번의 경우 답변해드리자면 Innodb 스토리지 엔진의 경우 B-Tree 만 지원하는 것으로 알고 있어서 해시 인덱스를 사용하고 싶다면 Memory 스토리지 엔진을 사용해야 하는 것으로 알고 있습니다.