MySQL에서 인덱스를 사용하여 정렬하고 있는지 어떻게 알 수 있습니까?


10

본질적으로 WHERE 절에서 사용되는 인덱스의 마지막 열인 열을 사용하는 ORDER BY 절이있는 쿼리가 있습니다.

SELECT
  cols
FROM
  tables
WHERE
  col_1 = x
  AND col_2 = y
  AND col_3 = z
ORDER BY col_4

색인은 순서대로 열 (col_1, col_2, col_3, col_4)에 작성됩니다.

쿼리를 프로파일 링하면 99 % 이상의 시간이 "정렬 결과"상태로 소비됩니다. col_4는 차이가있는 경우 타임 스탬프 열입니다. ORDER BY는 특정 상황에서만 인덱스를 사용할 수 있다는 것을 알고 있지만 옵티마이 저가 언제 그렇게 할 것인지에 대해서는 여전히 약간의 미스터리입니다.

답변:


13

EXPLAIN EXTENDED쿼리 전에 추가 하고 결과를 직접 확인 해야합니다 .

에 대한 항목이 있어야합니다

  • possible_keys

이 열이 NULL이면 관련 인덱스가 없습니다. 이 경우 WHERE 절을 검사하여 인덱싱에 적합한 일부 열을 참조하는지 확인하여 쿼리 성능을 향상시킬 수 있습니다.

  • 열쇠

키 열은 MySQL이 실제로 사용하기로 결정한 키 (인덱스)를 나타냅니다. MySQL이 possible_keys 인덱스 중 하나를 사용하여 행을 찾으려면 해당 인덱스가 키 값으로 나열됩니다.

자세한 정보는이 Explain 출력Explain join_types를 참조하십시오.


내 질문은 ORDER BY 절과 관련이 있다는 것을 이해합니다. 내 쿼리는 반환 된 행을 제한하기 위해 지정된 인덱스를 사용하고 있지만 정렬 성능을 감안할 때 ORDER BY 절에 사용하지 않는 것 같습니다.
Chris Cooper

1
경우에 따라 MySQL은 인덱스를 사용하여 추가 정렬을 수행하지 않고 ORDER BY 절을 충족시킬 수 있습니다. 인덱스의 사용되지 않은 모든 부분과 모든 추가 ORDER BY 열이 WHERE 절에서 상수 인 경우 ORDER BY가 인덱스와 정확하게 일치하지 않더라도 인덱스를 사용할 수 있습니다. 다음 쿼리는 인덱스를 사용하여 ORDER BY 부분을 해결합니다.이 dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html
Mahesh Patil

1

당신이 사용하는 EXPLAIN쿼리에 ( explain select-or-whatever-your-query-is).

possible_keys사용할 수있는 것과 key실제로 사용 된 것을 보여줍니다 .


1
그것에 더하여 : explain format=json select ...더 강력하다. 여기에는 used_key_parts복합 키가 부분적으로 또는 완전히 사용되었는지 여부를 알려주고 index_condition쿼리의 어느 부분이 어떤 인덱스를 담당하는지 알려줍니다.
okdewit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.