조합 색인 을 만 들 때 색인 열 순서 선택

1305 단어 데이터 뱅 크
조합 색인 을 만 들 때 인터넷 에서 일반적인 표현 은 검색 할 때 where 조건 의 열 순 서 는 색인 을 만 들 때 열 순서 와 일치 해 야 합 니 다. 그렇지 않 으 면 조합 색인 이 효력 을 잃 습 니 다.더 나 아가 조합 색인 의 각 열 에서 누가 앞 에 있어 야 하 는 지, 누가 뒤에 있어 야 하 는 지, 아니면 생 성 시 순서 에 영향 을 주지 않 고 조회 할 때 상기 언급 한 규칙 을 위반 하지 않 으 면 됩 니까?
my sql 의 InnoDB 엔진 에 있어 서 조합 색인 B + 트 리 구조의 잎 노드 는 첫 번 째 열의 값 크기 에 따라 정렬 됩 니 다. 예 를 들 어 조합 색인 (a, b, c), a, b, c 는 열 이름 이 고 단독 열 색인 (a): 데 이 터 는 이 두 색인 트 리 의 순 서 는 같 습 니 다 (a 열 에 있 는 값 이 같 을 때 만 b, c 열 에 따라 정렬 합 니 다).
그래서 조합 색인 을 만 들 때 열 순 서 는 조회 효율 에 영향 을 미 칠 것 이 고 쓰기 (a, b, c) 와 (b, a, c) 는 다 를 것 이다.
그렇다면 적절 한 순 서 를 어떻게 선택해 야 할 까?
《 고성능 MySQL 》 이라는 책 에서 언급 한 경험 법칙: 선택 성 이 가장 높 은 열 을 색인 맨 앞 에 놓는다.
'선택성 이 가장 높다' 는 것 은 차이 가 가장 크다 는 것 을 말한다. 즉, 이 열의 중복 값 이 가장 적다. 이렇게 만들어 진 색인 트 리 는 필요 한 값 을 찾 을 때 속도 가 빠르다.한 표 에 100 줄 의 데이터 가 있다 고 가정 하면 이 열 에 있 는 값 은 두 개 밖 에 없다. 그러면 이렇게 만들어 진 색인 트 리 에서 그들 은 100 개의 잎 노드 (실제 구 조 는 그렇지 않 고 기억 이 편리 하기 위해 이렇게 이해 할 수 있다) 에 대응 하고 절반 의 노드 값 은 모두 중복 되 며 이런 노드 를 옮 겨 다 니 면 절반 의 데이터 만 걸 러 낼 수 있 고 효율 이 현저히 낮다.(값 이 다 르 면 한 번 에 해당 하 는 데 이 터 를 찾 을 수 있 습 니 다).
구체 적 인 사용 방법:
SELECT COUNT(DISTINCT a)/count(*) AS a_selectivity,
				COUNT(DISTINCT b)/count(*) AS b_selectivity,
				COUNT(DISTINCT c)/count(*) AS c_selectivity
FROM table_name

값 이 가장 큰 열 을 색인 열의 첫 번 째 열 로 합 니 다.

좋은 웹페이지 즐겨찾기