>  기사  >  데이터 베이스  >  MySQL 인덱스 푸시다운이 무엇인지 분석해 보세요. 최적화에 도움이 되나요?

MySQL 인덱스 푸시다운이 무엇인지 분석해 보세요. 최적화에 도움이 되나요?

藏色散人
藏色散人앞으로
2021-11-04 15:51:541689검색

Mysql 성능 최적화: 인덱스 푸시다운이란 무엇입니까?

소개

ICP라고 불리는 인덱스 조건 푸시다운(index Condition pushdown)은 Mysql5.6 버전에서 출시되었으며 쿼리를 최적화하는 데 사용됩니다.

ICP를 사용하지 않고 기본 키가 아닌 인덱스(일반 인덱스 또는 보조 인덱스라고도 함)를 사용하여 쿼리하는 경우 스토리지 엔진은 인덱스를 통해 데이터를 검색하여 MySQL 서버에 반환한 다음 데이터가 있는지 여부를 결정합니다. 조건을 충족합니다.

ICP를 사용할 때 특정 인덱스 열에 대한 판단 조건이 있는 경우 MySQL 서버는 판단 조건 중 이 부분을 스토리지 엔진에 전달하고, 스토리지 엔진은 인덱스가 MySQL 서버가 전달한 조건을 충족하는지 여부를 판단합니다. . 인덱스가 조건을 충족하는 경우에만 데이터가 검색되어 MySQL 서버로 반환됩니다.

인덱스 조건 푸시다운 최적화는 스토리지 엔진이 기본 테이블을 쿼리하는 횟수를 줄이고 MySQL 서버가 스토리지 엔진에서 데이터를 수신하는 횟수도 줄일 수 있습니다.

【추천 학습: mysql 비디오 튜토리얼

Open

시작하기 전에 사용자 테이블(user)을 준비하세요. 주요 필드는 ID, 이름, 나이, 주소입니다. 공동 인덱스(이름, 나이)를 만듭니다.

이름이 Chen인 모든 사용자를 일치시켜야 한다는 요구 사항이 있다고 가정합니다. SQL 문은 다음과 같습니다.

SELECT * from user where  name like '陈%'

"가장 왼쪽 접두사" 원칙에 따라 여기서는 결합 인덱스(이름, 나이)가 사용됩니다. 쿼리, 전체 테이블 스캔보다 성능이 확실히 높습니다.

질문은, 만약 다른 조건이 있다면 어떨까요? 이름이 Chen이고 나이가 20세인 사용자를 일치시키기 위한 또 다른 요구 사항이 있다고 가정합니다. 이때 SQL 문은 다음과 같습니다.

SELECT * from user where  name like '陈%' and age=20

이 SQL 문은 어떻게 실행되어야 합니까? 다음은 Mysql5.6 이전 버전과 이후 버전을 분석한 것이다.

Mysql 5.6 이전 버전

5.6 이전 버전은 인덱스 푸시다운 최적화 기능이 없으므로 실행 과정은 다음과 같습니다.

MySQL 인덱스 푸시다운이 무엇인지 분석해 보세요. 최적화에 도움이 되나요?

에서는 age 필드를 무시하고 이름(이름, 이름)을 통해 직접 쿼리합니다. age) 이 레슨의 트리에서는 ID가 각각 2와 1인 두 개의 결과가 발견되었습니다. 그런 다음 얻은 ID 값을 테이블에 계속 반환하여 쿼리를 수행했기 때문에 이 프로세스에서는 테이블로 두 번 반환해야 했습니다.

Mysql5.6 이상 버전

5.6 버전에는 인덱스 푸시다운 최적화가 추가되었습니다. 실행 프로세스는 다음과 같습니다.

MySQL 인덱스 푸시다운이 무엇인지 분석해 보세요. 최적화에 도움이 되나요?

InnoDB는 age 필드를 무시하지 않지만 인덱스 내부의 age를 결정합니다. 20과 같나요? 20이 아닌 레코드는 바로 건너뛰기 때문에 (이름, 연령) 인덱스 트리에서는 한 개의 레코드만 일치하므로 이 ID를 사용하여 기본 키 인덱스의 테이블로 돌아옵니다. 이 프로세스는 한 번만 테이블에 반환하면 됩니다.

Practice

물론 위의 분석은 원칙에 불과하므로 실제로 분석할 수 있으므로 Chen은 Mysql 버전 5.6을 설치하고 위의 구문을 아래와 같이 구문 분석했습니다.

MySQL 인덱스 푸시다운이 무엇인지 분석해 보세요. 최적화에 도움이 되나요?

설명에 따르면 구문 분석 결과 Extra의 값이 Using index 조건인 것으로 표시됩니다. 이는 인덱스 푸시다운이 사용되었음을 의미합니다.

요약

기본 키가 아닌 인덱스에 대한 인덱스 푸시다운 최적화는 테이블 반환 횟수를 효과적으로 줄이고 쿼리 효율성을 크게 향상시킬 수 있습니다.

인덱스 푸시다운을 끄려면 다음 명령을 사용하면 됩니다. 구성 파일 수정은 더 이상 설명하지 않습니다. 결국 이렇게 뛰어난 기능을 꺼야 하는 이유는 다음과 같습니다.

set optimizer_switch='index_condition_pushdown=off';

위 내용은 MySQL 인덱스 푸시다운이 무엇인지 분석해 보세요. 최적화에 도움이 되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.im에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제