mysql 효율 적 인 인덱스 실례 분석 구축

3371 단어 mysql인덱스
본 논문 의 사례 는 my sql 이 효율 적 인 색인 을 만 드 는 것 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
어떻게 이상 적 인 색인 을 만 듭 니까?
조회 빈도
구분 도
색인 길이
덮어 쓰기 필드
구분 도
100 만 이용 자 를 가정 하면 성별 은 기본적으로 남자/여자 가 각각 50W 로 구분 도가 낮다.
길이 가 작다
색인 길 이 는 색인 파일 의 크기 에 직접적인 영향 을 주 고 삭제 속도 에 영향 을 주 며 검색 속도 에 간접 적 으로 영향 을 줍 니 다(메모리 사용량 이 많 음).
구분 도가 높 고 길이 가 작다
문제:구분 이 높 고 길이 가 작다 면?
답:열 에 있 는 값 에 대해 왼쪽 에서 오른쪽으로 부분 을 캡 처 하여 색인 을 만 들 수 있 습 니 다.
(1)자 르 는 것 이 짧 을 수록 중복 도가 높 고 구분 도가 낮 을 수록 색인 효과 가 좋 지 않다.
(2)자 르 는 것 이 길 수록 중복 도가 낮 고 구분 도가 높 을 수록 색인 효과 가 좋 지만 가 져 오 는 영향 도 크 고 C 의 첨삭 변화 가 느 리 며 조회 속도 에 영향 을 미친다.
그래서 우 리 는 구분 도+길이 두 가지 에서 균형 을 잡 아야 한다.관용 기법:서로 다른 길 이 를 자 르 고 그 구분 도 를 측정 한다.
만약 에 우리 가 표 한 장 을 가지 고 있다 고 가정 하면 영어 4 급 단어 표 안에 13324 개의 기록 이 있 는데 우 리 는 어떻게 name 필드 에 색인 을 추가 합 니까?
这里写图片描述
구역 구분 을 계산 하면?
단어 1 위의 중복 되 지 않 는 수 를 캡 처 합 니 다:

select count(distinct left(name,1)) from dict
총 수량:

select count(*) from dict
구분 도:중복 수/총 수량,sql 문 구 는 다음 과 같 습 니 다.

select (select count(distinct left(name,1)) from dict) / (select count(*) from dict) as rate;

그 다음 에 이런 절차 에 따라 다른 길이 에 대응 하 는 구분 도 를 찾 아 보 세 요.이 도 표를 보면 길이 가 11 일 때 중복 도 는 1%에 불과 하 다 는 것 을 알 수 있 습 니 다.우 리 는 11 비트 길이 의 색인 을 만 드 는 것 을 고려 할 수 있 습 니 다.
这里写图片描述

alter table dict add index name name(11);

왼쪽 접두사 구분 하기 어 려 운 경우
왼쪽 접두사 가 구분 되 지 않 는 열 에 대해 색인 을 만 드 는 방법
url 열
http://www.baidu.com
http://www.web-bc.cn
열 앞의 11 자 는 모두 같 아서 구분 하기 가 쉽 지 않 으 며 다음 과 같은 두 가지 방법 으로 해결 할 수 있다.
(1)열 내용 을 거꾸로 저장 하고 색인 만 들 기
moc.udiab.www//:ptth
nc.cb-bew.www//://ptth
이렇게 하면 왼쪽 접두사 의 구분 이 큽 니 다.
(2)위조 hash 인덱스 효과
url 과 url 을 동시에 저장 합 니 다해시 열

#  
create table t10 (
id int primary key,
url char(60) not null default ''
);
#    
insert into t10 values
(1,'http://www.baidu.com'),
(2,'http://www.sina.com'),
(3,'http://www.sohu.com.cn'),
(4,'http://www.onlinedown.net'),
(5,'http://www.gov.cn');
#     ,  urlcrc 
alter table t10 add urlcrc int unsigned not null;

저장 할 때 url 에 대응 하 는 crc 32 코드 를 데이터베이스 에 함께 삽입 한 다음 에 urlcrc 필드 에 따라 색인 을 만 든 다음 에 찾 을 때 저 희 는 업무 층 에서 해당 하 는 url 을 crc 32 로 변환 하여 찾 으 면 위의 색인 을 이용 할 수 있 습 니 다.
crc 의 결 과 는 32 비트 int 부호 가 없 기 때문에 데이터 가 40 억 을 넘 으 면 중복 되 지만 이것 은 가치 가 있 습 니 다.(색인 길 이 는 int4 바이트)
다 열 인덱스
다 열 색인 의 고려 요소 인 열의 조회 빈도,열의 구분 도 는 반드시 실제 업무 장면 과 결합 해 야 한다.
ecshop 상점 의 경우 goods 표 의 catid,brand_id,다 열 색인 만 들 기,구분 도 에서 볼 때 brandid 구역 의 분 도 는 더욱 높 지만 상점 의 실제 업무 업 무 를 보면 고객 은 보통 큰 분류->작은 분류->브랜드 를 선택 하고 최종 적 으로 2 개의 색인 을 만 드 는 것 을 선택한다.
(1)index(cat_id,brand_id)
(2)index(cat_id,shop_price)
심지어(3)index(catid,brand_id,shop_price),3 개의 중복 색인
단(3)의 앞 2 열 은(1)의 앞 2 열 과 같 기 때문에(1)을 더 지우 고 2 개의 색인 을 만 들 수 있 습 니 다.
4.567914.와 4.567914.
더 많은 MySQL 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.,,,,,,,
본 논문 에서 말 한 것 이 여러분 의 MySQL 데이터베이스 계획 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기