당신 의 like 문 구 는 왜 색인 에 대한 상세 한 설명 이 없 습 니까?
본 고 는 가장 통속 적 인 언어 로 가장 무미건조 한 기본 지식 을 이야기 하 는 데 목적 을 두 고 있다.
이 화 제 는 비교적 재미있다.어제 점심 을 먹고 나 서 갑자기 한 동료 가 튀 어 나 왔 다."like 색인 있어 요?"나 는 입 에서 나 오 는 대로 없다 고 말 했다.다른 동 료 는 있다 고 반박 했다.또 어떤 동 료 는 상황 을 보 니 있다 고 말 했다.이 제 는 좀 어 리 석 었 다.그런 말 이 정확 한 지 몰 랐 다.그래서 이 문 제 를 연구 하고 검증 하 는 데 시간 반 이 걸 려 서 마침내 답 을 얻 었 다.
어떻게 검 증 했 죠?
MySQL 의 성능 최적화 에는 explain 이라는 신기 가 있 는데 selection 문 구 를 분석 하고 상세 한 select 실행 과정의 상세 한 정 보 를 출력 하여 개발 자 들 이 이러한 정보 에서 최적화 된 방향 을 얻 을 수 있다 는 소문 이 있다.
다음은 이 MySQL 이 제공 하 는 explain 명령 을 설명 합 니 다.
문법:explain SQL 문장:
1explain select * from user where id=1
실행 이 끝 난 후 출력 은 다음 필드 가 있 습 니 다:id
select_type
table
partitions
type
possible_keys
key
key_len
ref
rows
Extra
explain 이름 을 어떻게 사용 하 는 지 알 고 싶 으 면 이 필드 들 을 알 아야 합 니 다.
1. id
SELECT 가 조회 하 는 식별 자 는 모든 SELECT 문 구 는 하나의 유일한 식별 자 를 자동 으로 분배 합 니 다.
2. select_type
각 select 는 자구 의 유형 을 조회 하고 구체 적 인 유형 과 대응 하 는 역할 은 다음 과 같다.
형식 이름
해명 하 다.
SIMPLE
간단 한 SELECT,UNION 이나 하위 검색 등 은 사용 하지 않 습 니 다.
PRIMARY
검색 에 복잡 한 하위 부분 이 포함 되 어 있 으 면 가장 바깥쪽 select 는 PRIMARY 로 표 시 됩 니 다.
UNION
UNION 의 두 번 째 또는 뒤의 SELECT 문구
DEPENDENT UNION
UNION 의 두 번 째 또는 뒤의 SELECT 문 구 는 외부 조회 에 달 려 있 습 니 다.
UNION RESULT
UNION 의 결과
SUBQUERY
하위 검색 의 첫 번 째 SELECT
DEPENDENT SUBQUERY
하위 검색 의 첫 번 째 SELECT 는 외부 검색 에 달 려 있 습 니 다.
DERIVED
파생 표 의 SELECT,FROM 자구 의 하위 조회
UNCACHEABLE SUBQUERY
하위 조회 결 과 는 캐 시 되 지 않 습 니 다.외부 링크 의 첫 줄 을 재평가 해 야 합 니 다.
3. table
이 줄 의 데 이 터 를 표시 하 는 것 은 어떤 시 계 를 찾 는 것 이지 만,때때로 단락 은 실제 표 이름 이 아 닙 니 다.
4. partitions
일치 하 는 파 티 션(이것 은 현재 쓸모 가 없습니다)
5. type
접근 형식 은 MySQL 이 표 에서 필요 한 줄 을 찾 는 방식 을 나타 내 며 해당 하 는 값 과 설명 은 다음 과 같 습 니 다.
형식 이름
우수 등급
해명 하 다.
system
1
시계 가 한 줄 밖 에 없다.
const
2
표 는 최대 일치 하 는 줄 이 있 습 니 다.검색 이 시 작 될 때 읽 힙 니 다.
eq_ref
3
primary key 나 unique key 를 다 중 표 로 연결 하 는 조건 으로 이 표 에서 한 줄 만 읽 습 니 다.
ref
4
검색 조건 의 색인 으로 표 마다 색인 값 과 일치 하 는 줄 을 표 에서 읽 습 니 다.
fulltext
5
전체 텍스트 인덱스 검색
ref_or_null
6
ref 와 일치 하지만 NULL 값 조회 지원 이 추가 되 었 습 니 다.
index_merge
7
색인 통합 최적화 방법 사용
unique_subquery
8
교체 in 하위 검색 사용
index_subquery
9
in 하위 검색 을 바 꾸 었 으 나 하위 검색 에 만 적용 되 는 유일한 색인 이 아 닙 니 다.
range
10
주어진 범위 의 줄 만 검색 하고 하나의 색인 으로 줄 을 선택 합 니 다.
index
11
전체 표를 스 캔 하지만,스 캔 표 의 방식 은 색인 순서에 따라 진행 된다.
ALL
12
표 전체 스 캔 방식 으로 일치 하 는 줄 을 찾 습 니 다.
type 은 방문 유형 으로서 그 값 은 현재 조회 에 사용 되 는 유형 을 대표 하고 성능 을 나타 내 는 중요 한 기준 이다.표 에서 볼 수 있 듯 이 위 에서 아래로 스캐닝 표 의 방식 이 점점 넓 어 지고 성능 도 점점 떨 어 지기 때문에 하나의 조회 에 있어 range 등급 이상 을 유지 하 는 것 이 좋다.
6. possible_keys
검색 이 어떤 색인 으로 표 에서 기록 을 찾 을 수 있 는 지 주동 적 으로 지적 합 니 다.즉,검색 에 있 는 필드 에 색인 이 있 는 필드 를 표시 하지만 반드시 검색 에 사용 되 는 것 은 아 닙 니 다.
7. key
재 검색 에 실제 사 용 된 색인/키 를 표시 합 니 다.색인 이 없 으 면 NULL 을 표시 합 니 다.그러나 강제 조회 에서 possible 를 사용 하거나 무시 하려 면keys 열 에 있 는 색인 은 검색 에서 FORCE INDEX,USE INDEX 또는 IGNORE INDEX 를 사용 할 수 있 습 니 다.
8. key_len
색인 에 사용 할 바이트 수 를 표시 합 니 다.
9. ref
색인 열 에 있 는 값 을 찾 는 데 어떤 열 이나 상수 가 사용 되 는 지 표시 합 니 다.
10. rows
현재 조회 에서 계 산 된 일치 하 는 기록 을 찾 는 데 필요 한 기록 줄 수 를 표시 합 니 다.
11. Extra
현재 검색 에 사용 되 는 해결 방법 을 보 여 줍 니 다.다음 과 같은 몇 가지 상황 이 있 습 니 다.
형식 이름
해명 하 다.
Using where
열 데 이 터 는 색인 에 있 는 정보 만 사용 하고 실제 행동 을 읽 지 않 은 표 에서 되 돌 아 옵 니 다.
Using temporary
MySQL 은 결과 집합 을 저장 하기 위해 임시 표를 사용 해 야 한 다 는 뜻 입 니 다.정렬 과 그룹 검색 에서 흔히 볼 수 있 습 니 다.
Using filesort
MySQL 에서 색인 을 사용 할 수 없 는 정렬 작업 을'파일 정렬'이 라 고 합 니 다.
Using join buffer
변경 값 은 연결 조건 을 가 져 올 때 색인 을 사용 하지 않 고 버퍼 에 연결 하여 중간 결 과 를 저장 해 야 한 다 는 것 을 강조 합 니 다.이 값 이 나 오 면 검색 의 구체 적 인 상황 에 따라 색인 을 추가 하여 개선 할 수 있 음 을 주의해 야 합 니 다.
Impossible where
이 값 은 where 문장 이 조건 에 부합 되 지 않 는 줄 을 초래 할 수 있 음 을 강조 한다.
Select tables optimized away
이 값 은 색인 만 사용 하 는 것 을 의미 합 니 다.유 틸 리 티 는 취 합 함수 결과 에서 한 줄 만 되 돌 릴 수 있 습 니 다.
문법 을 다 말 하고 우 리 는 실제 적 으로 한 파 를 조작 합 니 다.먼저 표를 만 듭 니 다.
--
CREATE TABLE test(
id INT(11) NOT NULL AUTO_INCREMENT,
uname VARCHAR(255),
PRIMARY KEY(id)
);
그리고 uname 필드 에 색인 을 추가 합 니 다:
--
ALTER TABLE test ADD INDEX uname_index (uname);
색인 추가 성공 여부 보기:
--
SHOW INDEX FROM test;
출력 결 과 는:색인 이 생 성 되 었 음 을 알 수 있 습 니 다.다음 에 데 이 터 를 추가 합 니 다.
--
INSERT INTO test VALUES(1,'jay');
INSERT INTO test VALUES(2,'ja');
INSERT INTO test VALUES(3,'bril');
INSERT INTO test VALUES(4,'aybar');
모든 준비 가 다 되 었 습 니 다.다음은 explain 이라는 명령 으로 like 문장 에 색인 이 있 는 지,like 는 네 가지 상황 이 있 습 니 다.각각%,%%,왼쪽%,오른쪽%입 니 다.1.like 필드 이름
EXPLAIN SELECT * FROM test WHERE uname LIKE 'j';
출력:이 를 통 해 알 수 있 듯 이 type 의 값 은 range 이 고 key 의 값 은 uname 이다.index,즉 이 경우 색인 을 사 용 했 습 니 다.
2.like%필드 이름%
EXPLAIN SELECT * FROM test WHERE uname LIKE '%j%';
출력:이 를 통 해 알 수 있 듯 이 type 의 값 은 ALL,즉 전체 표 스 캔 이 고 key 의 값 은 NULL 입 니 다.즉,색인 을 사용 하지 않 았 습 니 다.
3.like%필드 이름
EXPLAIN SELECT * FROM test WHERE uname LIKE '%j';
출력:이 를 통 해 알 수 있 듯 이 type 의 값 은 ALL 이 고 key 의 값 은 NULL 이 며 색인 을 사용 하지 않 았 습 니 다.
4.like 필드 이름%
EXPLAIN SELECT * FROM test WHERE uname LIKE 'j%';
출력:이 를 통 해 알 수 있 듯 이 type 의 값 은 range 이 고 key 의 값 은 uname 이다.index,즉 이 경우 색인 을 사 용 했 습 니 다.
총결산
위의 시험 에서 like 가 색인 을 사용 하 는 지 여 부 를 정리 할 수 있 습 니 다.like 문 구 는 색인 을 유효 하 게 해 야 합 니 다.like 후%로 시작 할 수 없습니다.즉,(like%필드 이름%) 、(like%필드 이름)과 같은 문 구 는 색인 을 무효 화 할 수 있 으 며,(like 필드 이름),(like 필드 이름%)과 같은 문 구 는 색인 을 정상적으로 사용 할 수 있 습 니 다.
기타
like 색인 문 제 를 확인 하기 위해 MySQL 신기 한 explain 을 연 구 했 습 니 다.그러나 explain 은 색인 사용 상황 만 검사 할 수 있 을 뿐만 아니 라 다른 성능 최적화 에 도 많은 도움 을 줄 수 있 습 니 다.구체 적 인 사용 에 대해 서 는 위 에서 말 한 것 처럼 explain 결 과 를 열거 한 다음 에 덩굴 을 따라 관련 필드 를 찾 아 보면 해당 하 는 내용 을 얻 을 수 있 습 니 다.
자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SQL 문자열(LIKE)특정 문자열을 포함한 값을 추출해준다. 컬럼이름 LIKE "검색할 문자열" 형식으로 사용한다. 문자열에는 와일드카드 % 와 _ 가 존재한다. % : 몇 개 이상의 문자 _ : 1개의 문자 % : 0개 이상의 문자 _...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.