MySQL 인덱스 가 실 효 된 몇 가지 상황 에 대한 상세 한 분석

1.퍼 지 검색 은 색인 을 사용 할 수 없습니다(like'%XX'또는 like'%XX%')
만약 이러한 코드 의 값 이'AA','AB','BAA','BAB'라면 where code like'%AB'조건 이 있다 면 앞 에 있 기 때 문 입 니 다.
모호 하기 때문에 색인 순 서 를 이용 할 수 없고 조건 이 충족 되 는 지 하나씩 찾 아야 합 니 다.이렇게 하면 전체 색인 검색 이나 전체 표 스 캔 을 초래 할 수 있다.
묘사 하 다.이러한 조건 이 라면 where code like'A%'는 CODE 에서 A 로 시작 하 는 CODE 의 위 치 를 찾 을 수 있 습 니 다.B 로 시작 하 는 것 을 만 났 을 때.
데 이 터 를 찾 을 때 검색 을 중단 할 수 있 습 니 다.왜냐하면 뒤의 데 이 터 는 반드시 요 구 를 만족 시 키 지 못 하기 때 문 입 니 다.이렇게 하면 색인 을 이용 할 수 있다.
2.조합 색인 이 라면 색인 순서에 따라 찾 지 않 는 다.예 를 들 어 세 번 째 위치 에 있 는 색인 을 직접 사용 하고 두 번 째 위치 에 있 는 색인 을 무시 할 때 전체 표 조 회 를 한다.
색인 은 c1,c2,c3,c4 입 니 다.

위의 그림 결과 에 따 르 면 c3 를 직접 사용 하 는 것 은 전체 표 조회 로 이 색인 을 사용 할 수 없 기 때문에 c3 필드 에서 색인 을 사용 하 는 전 제 는 c1,c2 두 글자 모두 색인 을 사용 한 것 으로 나 타 났 다.
3.조건 중 에 or
where 자구 에서 or 를 사용 하여 조건 을 연결 하 는 것 을 피해 야 합 니 다.그렇지 않 으 면 엔진 이 색인 사용 을 포기 하고 전체 표 스 캔 을 할 수 있 습 니 다.예 를 들 어:

select id from t where num=10 or num=20
이렇게 조회 할 수 있 습 니 다.

select id from t where num=10 union all select id from t where num=20
4.색인 은 null 값 을 저장 할 수 없 기 때문에 where 의 판단 조건 이 필드 에 대해 null 값 판단 을 하면 데이터 베 이 스 는 색인 을 포기 하고 전체 표 조 회 를 할 수 있 습 니 다.예 를 들 어

select id from t where num is null
num 에 기본 값 0 을 설정 하여 표 의 num 열 에 null 값 이 없 는 지 확인 한 다음 에 이렇게 조회 할 수 있 습 니 다.

select id from t where num=0
a.단일 색인 은 null 값 을 저장 할 수 없고 복합 색인 은 null 값 으로 저장 할 수 없습니다.
b.조회 할 때 is null 조건 을 사용 할 때 색인 을 이용 할 수 없고 전체 표 만 스 캔 할 수 있 습 니 다.
왜 색인 열 에 Null 값 을 저장 할 수 없 습 니까?
a.색인 은 질서 가 있다.NULL 값 이 색인 에 들 어 갔 을 때 어디 에 두 어야 할 지 알 수 없습니다.(색인 열 값 을 트 리 로 만 듭 니 다.그 중에서 많은 비교 작업 과 관련 될 것 입 니 다.null 값 은 불확실 한 값 으로 비교 할 수 없습니다.null 이 색인 트 리 의 잎 노드 에 나타 난 위 치 를 확인 할 수 없습니다.)
5.where 자구 에서 사용 하 는 것 을 최대한 피해 야 합 니 다!=또는<>연산 자,그렇지 않 으 면 엔진 을 색인 사용 을 포기 하고 전체 표 스 캔 을 합 니 다.
6.in 과 not in 도 신중하게 사용 해 야 한다.그렇지 않 으 면 전체 표 스 캔 을 초래 할 수 있다.예 를 들 어:

select id from t where num in(1,2,3)
연속 적 인 수치 에 대해 between 을 사용 할 수 있 으 면 in 을 사용 하지 마 십시오:

select id from t where num between 1 and 3
7.where 자구 에서 필드 에 함수 조작 을 하 는 것 을 피해 야 합 니 다.이 로 인해 엔진 이 색인 사용 을 포기 하고 전체 표 스 캔 을 할 수 있 습 니 다.예:
Cname abc 로 시작 하 는 id

select id from t where substring(name,1,3)='abc'
8.where 자구 에서 필드 를 표현 식 으로 조작 하 는 것 을 피해 야 합 니 다.이 로 인해 엔진 이 색인 사용 을 포기 하고 전체 표 스 캔 을 할 수 있 습 니 다.예:

select id from t where num/2=100
다음 으로 변경 해 야 합 니 다.

select id from t where num=100*2
총결산
MySQL 색인 이 실 효 된 몇 가지 상황 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 MySQL 색인 이 실 효 된 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기