>  기사  >  데이터 베이스  >  mysql 인덱스 학습 tutorial_MySQL

mysql 인덱스 학습 tutorial_MySQL

WBOY
WBOY원래의
2016-10-09 08:33:401053검색

mysql에서 인덱스는 해시 인덱스와 btree 인덱스의 두 가지 유형으로 나눌 수 있습니다.

B-tree 인덱스는 어떤 상황에서 사용할 수 있나요?

1.전체 값 매칭 지수

예:

주문ID="123"

2. 가장 왼쪽 접두사 인덱스 쿼리와 일치

예: 사용자 ID 및 날짜 필드에 대한 공동 색인을 생성합니다.
그런 다음 조건으로 userId를 입력하면 해당 userid를 인덱스에 사용할 수 있습니다. 날짜를 조건으로 직접 입력하면 인덱스를 사용할 수 없습니다.

3. 일치 열 접두사 쿼리

예: order_sn like '134%' 이는 인덱스를 사용할 수 있습니다.

4. 일치하는 범위 값 쿼리

createTime>'2015-01-09' 및 createTime<'2015-01-10'

5. 왼쪽 앞 열과 범위가 다른 열과 정확히 일치

예:

userId=1 및 createTime>'2016-9-18'

6. 인덱스에만 접근하는 쿼리를 커버링 인덱스라고 하며, 인덱스에는 쿼리 열의 데이터가 포함됩니다.

BTREE 지수의 한계

1. 인덱스의 가장 왼쪽 열부터 검색이 시작되지 않으면 인덱스를 사용할 수 없습니다.

예를 들어 공동 색인을 생성합니다.

orderId 및 createTime 필드는 결합 인덱스를 생성합니다. orderid 조건 없이 createTIme 조건만 입력하면 이 인덱스는 사용되지 않습니다.

2. 인덱스를 사용할 때 인덱스된 열을 건너뛸 수 없습니다.

3개 열:

날짜, 이름, 전화번호는 컬럼과 인덱스를 형성합니다. 쿼리 시 날짜와 전화번호만 입력하면 날짜만 필터링용 인덱스로 사용할 수 있습니다.

3.NOT IN 및 <> 연산은 인덱스를 사용할 수 없습니다.

4. 쿼리의 특정 열에 대한 범위 쿼리가 있는 경우 오른쪽에 있는 모든 열은 인덱스를 사용할 수 없습니다.

해시 인덱스의 특징

해시 인덱스는 해시 테이블을 기반으로 구현됩니다. 해시 인덱스는 쿼리 조건이 해시 인덱스의 모든 열과 정확히 일치하는 경우에만 사용할 수 있습니다. 동등한 쿼리만 가능합니다.

해시 인덱스의 모든 열에 대해 스토리지 엔진은 각 행에 대한 해시 코드를 계산하고 해시 코드는 해시 인덱스에 저장됩니다.

제한사항:

1. 두 번 읽어야 하며, 먼저 해시를 읽어 해당 행을 찾은 다음 해당 행 데이터를 읽어야 합니다.

2.해시 인덱스는 정렬에 사용할 수 없습니다.

3. 정밀 검색만 지원되며, 부분 색인 검색, 범위 검색은 지원되지 않습니다.

해시 충돌:

해시 인덱스는 선택성이 낮은 필드에는 사용할 수 없지만, 선택성이 강한 열에서는 해시 인덱스를 생성하는 데 사용해야 합니다.

예: 성별 필드에 해시 인덱스를 생성하지 마세요.

색인을 사용하는 이유는 무엇인가요?

1. 인덱스는 스토리지 엔진이 스캔해야 하는 데이터 양을 크게 줄여줍니다. 인덱스가 데이터 크기보다 작습니다.

2. 인덱스는 임시 테이블을 사용하지 않도록 정렬하는 데 도움이 됩니다. 인덱스는 순서가 지정됩니다.

3. 인덱스는 무작위 I/0을 순차 IO로 전환할 수 있습니다

인덱스는 많을수록 좋나요?

1. 인덱스로 인해 쓰기 작업 비용이 증가합니다

2. 인덱스가 너무 많으면 쿼리 최적화 프로그램과 선택 시간이 늘어납니다.

인덱싱 전략

1. 인덱스 열에는 표현식이나 함수를 사용할 수 없습니다.

예: to_days(out_date) –to_days(current_date)<=30, out_date가 인덱스 열인 제품에서 *를 선택합니다.

다음으로 변경됨:

out_date

2. 인덱스 크기는 특정 값을 초과할 수 없습니다.
inodb 인덱스 열 크기는 200 길이입니다.

3. 접두사 및 인덱스 열의 선택성.

테이블(계정)에 인덱스 idx_NAME을 생성합니다.

4. 조합지수

인덱스 컬럼의 순서를 선택하는 방법.

1. 자주 색인이 생성되는 열.

2. 선택도가 높은 컬럼이 우선 적용됩니다.

3. 작은 열에 인덱스를 만듭니다.

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