조합 색인 을 만 들 때 색인 열 순서 선택
1305 단어 데이터 뱅 크
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
값 이 가장 큰 열 을 색인 열의 첫 번 째 열 로 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
nginx websocket ip_해시 규칙프로젝트 를 다운로드 한 후 서로 다른 네트워크 에 각각 이 demo 프로젝트 를 배치 합 니 다. 프로젝트 에서 환경 변수 에 따라 시스템 변 수 를 설정 합 니 다. spring.profiles.active=de...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.