Mysql 인덱스 세부정보:
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. 작은 열에 인덱스를 만듭니다. 이 기사를 읽어주셔서 감사합니다. 모든 사람에게 도움이 되기를 바랍니다. 이 사이트를 지원해 주셔서 감사합니다!