sqlserver는 전체 테이블 스캔을 방지합니다.

인덱스 실패 이유

1: 전체 값 일치
2: 가장 좋은 왼쪽 접두사 규칙
3: 기본 키 삽입 순서
4: 계산, 함수, 유형 변환(자동 또는 수동)으로 인해 인덱스 오류 발생
5: 유형 변환으로 인해 인덱스 오류 발생
6: 오른쪽에 있는 열 인덱스 범위 조건이 무효화됨
7 : 같지 않음 (!= 또는 <>) 인덱스 무효화
8: null이면 인덱스를 사용할 수 있고, null이 아니면 인덱스를 사용할 수 없음
9: 와일드카드 문자 %로 시작하는 것처럼 인덱스가 유효하지 않음
10 : 전후에 색인화되지 않은 열이 있거나 색인이 유효하지 않은 경우(전후 또는 필드에 모두 색인이 있을 수 있음) 11
: 데이터베이스 및 테이블의 문자 세트는 utf8mb4를 균일하게 사용합니다. 비교하기 전에 다른 문자 세트를 변환해야 합니다. 12
: order by 인덱스에 따라 정렬할 때, 선택된 매핑이 인덱스가 아니면 인덱스를 거치지 않고, 기본키로 정렬해도 여전히 인덱스 13을 거치게 된다:
> 기본 키 또는 인덱스가 정수 유형인 경우에도 여전히 인덱스를 통과하게 됩니다.

최적화하는 방법?

1: (nolock)을 사용하여 더티 읽기 추가
2: 여러 쿼리 조건에 인덱스 추가
3: 인덱스 실패 구문 확인(위의 인덱스 실패 이유 참조)
4: 쿼리 범위 좁히기(예: 주문 및 시간 통계)
5: where 조건 앞의 필드 범위를 좁히는 조건을 배치해 보세요
6: 성능에 영향을 미치는 문 최적화

추천

출처blog.csdn.net/weixin_49543015/article/details/131399355