인덱스 사양
1. [필수] 고유한 업무 특성을 지닌 필드는 결합된 필드라도 고유한 인덱스로 구축해야 합니다.
참고: 고유 인덱스가 삽입 속도에 영향을 미친다고 생각하지 마십시오. 이러한 속도 손실은 무시할 수 있지만 검색 속도의 향상은 분명합니다. 또한 응용 프로그램에서 매우 완벽한 체크섬 제어가 있더라도 마찬가지입니다. 머피의 법칙에 따르면 고유 인덱스가 없는 한 레이어에는 더티 데이터가 있어야 합니다.
참고:
두 테이블을 조인할 때도 테이블 인덱스와 SQL 성능에 주의해야 합니다.
3. [필수] varchar 필드에 인덱스를 생성할 때 인덱스 길이를 지정해야 합니다. 인덱스 길이는 실제 텍스트 구분에 따라 결정됩니다.
설명:
색인의 길이와 구별은 모순된 쌍입니다. 일반적으로 문자열 유형 데이터의 경우 길이가 20인 색인의 경우 구별이 90% 이상 높을 수 있습니다. count(distinct left( 컬럼 이름 , 인덱스 길이)) / count(*) 는 구별 정도에 따라 결정됩니다.4. [필수] 페이지 검색 시 왼쪽 흐림 또는 전체 흐림 사용을 엄격히 금지합니다. 필요한 경우 검색 엔진을 사용하여 문제를 해결하세요.
인덱스 파일에는 B-Tree의 가장 왼쪽 접두사 일치 기능이 있습니다. 왼쪽의 값이 결정되지 않으면 이 인덱스를 사용할 수 없습니다.
5. [추천] 시나리오별 순서가 있는 경우 인덱스의 질서에 주의해주세요. 순서대로 마지막 필드는 결합된 인덱스의 일부이며 file_sort 상황을 방지하고 쿼리 성능에 영향을 미치기 위해 인덱스 조합 순서의 끝에 배치됩니다.
a =? a >10 ORDER BY b; 인덱스 a _ b는 정렬할 수 없습니다.
6. [권장] 테이블 반환 작업을 피하기 위해 쿼리 작업을 수행하려면 커버링 인덱스를 사용하세요.
설명: 책에서 11장의 제목이 무엇인지 알아야 한다면 11장에 해당하는 페이지로 넘어가나요? 잠시 동안 디렉토리를 찾아보십시오. 이 디렉토리는 포함 색인 역할을 합니다.
긍정적 예: 생성할 수 있는 인덱스 유형: 기본 키 인덱스, 고유 인덱스, 일반 인덱스 및 포함 인덱스는 쿼리의 효과입니다. 설명 결과를 사용하면 인덱스를 사용하여 추가 열이 나타납니다.
7. [권장] 여러 페이징 시나리오를 최적화하려면 지연된 상관 관계 또는 하위 쿼리를 사용하세요.
설명: MySQL은 오프셋 행을 건너뛰지 않고 오프셋 + N 행을 취한 다음 포기하기 전에 오프셋 행을 반환하고, 오프셋이 특히 크면 효율성이 매우 낮거나 제어됩니다. 반환된 총 페이지 수 또는 특정 임계값을 초과하는 페이지에 대한 SQL 재작성입니다.
긍정적 예: 먼저 획득해야 하는 id 세그먼트를 빠르게 찾은 다음 연결합니다.
SELECT a.* FROM table 1 a, (조건이 LIMIT 100000,20인 테이블 1에서 id 선택) b where a.id =b.id참고:
1) 단일 consts 테이블에는 최대 하나의 일치하는 행(기본 키 또는 고유 인덱스)이 있으며 최적화 단계에서 데이터를 읽을 수 있습니다. 2) ref는 일반 인덱스를 사용하는 것을 의미합니다. 3) range는 인덱스에서 범위 검색을 수행합니다.카운터 예: 테이블의 결과를 설명합니다. 유형 = 인덱스, 인덱스 실제 파일의 전체 스캔, 속도가 매우 느립니다. 이 인덱스 수준은 범위에 비해 여전히 낮으며 전체에 비해 왜소합니다. 테이블 스캔.
긍정적인 예: a =? 및 b =?인 경우 a 열이 고유 값에 거의 가까우면 idx_a 인덱스만 작성하면 됩니다.
참고: 비등호와 등호의 혼합 판단 조건이 있는 경우, 인덱스 작성 시 등호 조건의 열을 앞에 두시기 바랍니다. 예를 들어, a >?and b =? 그러면 a가 더 높은 구별도를 가지더라도 b는 인덱스의 맨 앞에 배치되어야 합니다.