>  기사  >  데이터 베이스  >  mysql에서 인덱스를 사용합니까?

mysql에서 인덱스를 사용합니까?

WBOY
WBOY원래의
2022-05-27 15:43:066596검색

in이 mysql에서 인덱스를 사용하는지 여부에는 두 가지 경우가 있습니다. 1. in의 값 범위가 작을 때 in은 인덱스를 사용합니다. 2. in의 값 범위가 클 경우 in은 인덱스를 사용하지 않습니다. 그러나 전체 테이블 스캔을 사용합니다. 조건이 너무 많으면 많은 데이터가 반환되어 애플리케이션 힙에 메모리 오버플로가 발생하고 인덱스 오류가 발생할 수 있기 때문입니다.

mysql에서 인덱스를 사용합니까?

이 튜토리얼의 운영 환경: windows10 시스템, mysql8.0.22 버전, Dell G3 컴퓨터.

mysql에서 인덱스를 사용하게 되나요?

결론: IN은 반드시 인덱스를 사용하지만 IN의 값 범위가 커지면 인덱스 오류가 발생하고 전체 테이블 스캔을 사용하게 됩니다.

navicat 시각화 도구는 explain 함수를 사용합니다. SQL 실행 정보를 보려면

시나리오 1: IN의 값에 기본 키가 하나만 있는 경우

mysql에서 인덱스를 사용합니까?

가장 중요한 유형 정보 중 하나에만 주의하면 인덱스가 사용되는지 여부가 분명해집니다.

최상의 결과 값:

system > const > eq_ref > ref_or_null > index_merge > index_subquery > ALL

all: 전체 테이블 스캔

index: another 전체 테이블 스캔의 한 형태이지만, 스캔 방법이 인덱스 순서인 것을 제외하고

range: 범위 인덱스 스캔으로, 인덱스의 전체 테이블 스캔에 비해 범위 제한이 있으므로 index

ref보다 좋습니다. 검색 조건 열은 인덱스를 사용하며 기본 키나 고유 키가 아닙니다. 실제로 인덱스를 사용하더라도 해당 인덱스 컬럼의 값이 고유하지 않고 중복되는 경우가 있다는 뜻이다. 이런 식으로 인덱스를 사용하여 첫 번째 데이터 조각을 빠르게 찾아도 여전히 멈출 수 없으며 목표 값에 가까운 작은 범위를 스캔해야 합니다. 하지만 인덱스가 정렬되어 있기 때문에 테이블 전체를 스캔할 필요가 없고, 중복된 값이 있어도 매우 작은 범위에서 스캔된다는 장점이 있다.

const: 일반적으로 조건부 쿼리로 where 뒤에 기본 키가 배치되면 mysql 최적화 프로그램이 쿼리를 최적화하고 이를 상수로 변환할 수 있습니다. 변환 방법과 시기는 옵티마이저에 따라 다릅니다

일반적으로 쿼리가 최소한 범위 수준(바람직하게는 ref)에 도달하는지 확인해야 합니다. index 및 all이 유형으로 나타나면 전체 테이블을 의미합니다. 스캔은 인덱싱 없이 수행되므로 효율성이 낮습니다. 이때 SQL을 조정해야 합니다.

추가 항목에 파일 사용 또는 임시 사용이 나타나면 해당 인덱스를 사용할 수 없다는 뜻이므로 최대한 빨리 최적화가 이루어져야 합니다.

possible_keys: SQL에서 사용하는 인덱스

key: MySQL이 실제로 사용하기로 결정한 키(인덱스)를 표시합니다. 선택된 인덱스가 없으면 키는 NULL입니다.

rows: MySQL이 쿼리를 실행할 때 검사해야 한다고 생각하는 행 수를 표시합니다.

시나리오 2: IN의 값 범위 확장

mysql에서 인덱스를 사용합니까?

이때 인덱스는 계속 사용되지만 효율성이 떨어집니다

시나리오 3: IN의 값 범위를 계속 확장

mysql에서 인덱스를 사용합니까?

보세요 위 그림을 보면 현재 인덱스는 없고 Full Table Scan을 한 것으로 확인됩니다.

결론을 이야기하자면

결론: IN은 반드시 인덱스를 사용하지만 IN의 값 범위가 커지면 인덱스 실패를 초래하고 전체 테이블 스캔을 사용하게 됩니다.

그런데: not in을 사용하면 인덱스가 사용되지 않습니다.

추천 학습:

mysql 비디오 튜토리얼

위 내용은 mysql에서 인덱스를 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.