아래와 같이 테이블을 만들었습니다
으아아아where 절을 기반으로 행을 선택한 다음 결과를 정렬하는 대규모 쿼리가 있습니다.
으아아아EXPLAIN을 실행하여 이 쿼리에 가장 적합한 인덱스를 찾으려고 합니다. 몇 가지 다른 색인을 만들었습니다 ;
EXPLAIN 쿼리는 다음을 표시합니다.
으아아아ORDER BY 열(index1 및 index3)이 포함된 인덱스를 사용하지 않는 이유와 WHERE 절 열의 하위 집합만 포함된 인덱스를 선택하는 이유가 궁금합니다. 인덱스 1은 쿼리의 전체 열 범위를 가지며 이상적이라고 생각합니다.
ORDER BY 컬럼(index2)만을 포괄하는 인덱스는 available_keys에 전혀 표시되지 않습니다. 여기서 인덱스를 잘못된 순서로 정의하고 있습니까?
쿼리에서 하나의 인덱스를 사용하여 필터링한 다음 다른 인덱스를 사용하여 결과를 정렬할 수 있나요?
보시다시피 448라인의 테스트를 진행하고 있습니다. 이 쿼리는 최대 100만 개의 더 큰 테이블에서 실행될 수 있습니다. 더 큰 테이블의 경우 다른 인덱스가 인덱스 4보다 성능이 더 좋습니까?
마지막으로 인덱스 1과 같이 컬럼이 많은 인덱스는 컬럼 개수만으로 성능이 저하되나요?
3가지 가능성:
이 조합은 선택적으로 "충분"할 경우 유용합니다:
INDEX(dialed, in_use, Schedule)
. 이 3개의 순서는 중요하지 않습니다.MySQL 8.0을 사용하는 경우 다음이 유용할 수 있습니다(주어진 순서대로):
으아아아이전 버전은 무시됩니다.
DESC
,使它们不使用INDEX
Even(8.0에서도 마찬가지):
으아아아