>  Q&A  >  본문

WHERE 절과 ORDER BY가 사용되지 않은 쿼리 인덱스

아래와 같이 테이블을 만들었습니다

으아아아

where 절을 기반으로 행을 선택한 다음 결과를 정렬하는 대규모 쿼리가 있습니다.

으아아아

EXPLAIN을 실행하여 이 쿼리에 가장 적합한 인덱스를 찾으려고 합니다. 몇 가지 다른 색인을 만들었습니다 ;

  1. (전화 걸기, 사용 중, 예약됨, 우선 순위, data_6, data_5, data_4, data_3, seq_id)
  2. (우선순위, data_6, data_5, data_4, data_3, seq_id)
  3. (예약됨, 사용중, 전화걸음, 우선순위, 데이터_6)
  4. (예약완료, 사용중)

EXPLAIN 쿼리는 다음을 표시합니다.

으아아아

ORDER BY 열(index1 및 index3)이 포함된 인덱스를 사용하지 않는 이유와 WHERE 절 열의 하위 집합만 포함된 인덱스를 선택하는 이유가 궁금합니다. 인덱스 1은 쿼리의 전체 열 범위를 가지며 이상적이라고 생각합니다.

ORDER BY 컬럼(index2)만을 포괄하는 인덱스는 available_keys에 전혀 표시되지 않습니다. 여기서 인덱스를 잘못된 순서로 정의하고 있습니까?

쿼리에서 하나의 인덱스를 사용하여 필터링한 다음 다른 인덱스를 사용하여 결과를 정렬할 수 있나요?

보시다시피 448라인의 테스트를 진행하고 있습니다. 이 쿼리는 최대 100만 개의 더 큰 테이블에서 실행될 수 있습니다. 더 큰 테이블의 경우 다른 인덱스가 인덱스 4보다 성능이 더 좋습니까?

마지막으로 인덱스 1과 같이 컬럼이 많은 인덱스는 컬럼 개수만으로 성능이 저하되나요?

P粉548512637P粉548512637245일 전396

모든 응답(1)나는 대답할 것이다

  • P粉178894235

    P粉1788942352024-02-18 11:30:24

    3가지 가능성:

    이 조합은 선택적으로 "충분"할 경우 유용합니다: INDEX(dialed, in_use, Schedule). 이 3개의 순서는 중요하지 않습니다.

    MySQL 8.0을 사용하는 경우 다음이 유용할 수 있습니다(주어진 순서대로):

    으아아아

    이전 버전은 무시됩니다. DESC,使它们不使用 INDEX

    Even(8.0에서도 마찬가지):

    으아아아

    회신하다
    0
  • 취소회신하다