MySQL의 다중 열 인덱스에서 필드 순서가 중요합니까?
P粉002023326
P粉002023326 2023-10-21 22:05:44
0
2
676

인덱스의 중요성과 조인 순서가 성능을 어떻게 변화시키는지 알고 있습니다. 다중 열 인덱스와 관련된 많은 내용을 읽었지만 내 질문에 대한 답을 찾지 못했습니다.

다중 열 인덱스를 수행하는 경우 지정 순서가 중요한지 궁금합니다. 내 생각에는 '아니요'이며 엔진은 순서가 중요하지 않은 그룹으로 처리합니다. 하지만 나는 그것을 확인하고 싶다.

예를 들어 mysql 웹사이트(http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html)에서

으아아아

어쨌든 다음이 더 좋거나 동등하며 어떤 이점이 있습니까?

으아아아

구체적으로:

으아아아

비교

으으으으

P粉002023326
P粉002023326

모든 응답(2)
P粉317679342

두 지수가 다릅니다. 이는 MySQL 및 기타 데이터베이스에서도 마찬가지입니다. MySQL은 문서 .

에서 차이점을 설명합니다.

두 개의 인덱스를 고려해보세요:

으아아아

두 가지 모두 다음에 동일하게 적용되어야 합니다.

으아아아

idx_lf는 다음에 최적입니다:

으아아아

idx_fl은 다음 상황에 가장 적합합니다.

으아아아

이와 같은 많은 경우에는 두 개의 인덱스를 사용하는 것이 가능하지만 그 중 하나가 최적입니다. 예를 들어 idx_lf 쿼리 사용을 고려해 보세요.

으아아아

MySQL은 idx_lf를 사용하여 전체 테이블을 읽은 다음 order by 이후에 필터링할 수 있습니다. 나는 이것이 실제로 (MySQL의 경우) 최적화 옵션이라고 생각하지 않지만 다른 데이터베이스에서는 발생할 수 있습니다.

P粉899950720

다중 열 인덱스를 논의할 때 전화번호부 비유를 사용합니다. 전화번호부는 기본적으로 성이 먼저 나온 다음 이름이 나오는 색인입니다. 따라서 정렬 순서는 어떤 "열"이 먼저 나오는지에 따라 결정됩니다. 검색은 다음 카테고리로 구분됩니다:

  1. 스미스라는 성을 가진 사람을 찾으면 책이 성을 기준으로 정렬되어 있기 때문에 쉽게 찾을 수 있습니다.

  2. John이라는 사람을 찾고 있다면 John이 책 곳곳에 흩어져 있기 때문에 전화번호부는 도움이 되지 않습니다. 전화번호부를 찾으려면 전체 전화번호부를 스캔해야 합니다.

  3. 특정 성과 이름이 John인 사람을 찾고 있다면 이 책이 도움이 될 것입니다. 왜냐하면 Smiths가 함께 정렬되어 있고 Smiths 내에서 Johns도 정렬된 순서로 찾을 수 있기 때문입니다.

전화번호부를 이름순으로 정렬한 다음 성순으로 정렬한 경우 전화번호부 정렬은 위의 사례 #2와 #3에 도움이 되지만 사례 #1에는 도움이 되지 않습니다.

정확한 값을 찾는 경우에 대해 설명하고 있는데, 다양한 값을 기준으로 찾는다면 어떨까요? 이름이 John이고 성이 "S"로 시작하는 모든 사람(Smith, Saunders, Staunton, Sherman 등)을 찾고 싶다고 가정해 보겠습니다. John은 각 성 내에서 "J"를 기준으로 정렬되지만 모든 성이 "S"로 시작하는 모든 John을 원하는 경우 John은 함께 그룹화되지 않습니다. 다시 분산되므로 성이 "S"로 시작하는 모든 이름을 검색해야 합니다. 그러나 전화번호부가 이름, 성 순으로 구성되어 있으면 모든 John이 함께 그룹화되고 John 내에서 모든 "S" 성이 함께 그룹화됩니다.

따라서 다중 열 인덱스의 열 순서는 확실히 중요합니다. 쿼리 유형에는 인덱스의 특정 열 순서가 필요할 수 있습니다. 여러 유형의 쿼리가 있는 경우 이를 지원하기 위해 열 순서가 다른 여러 인덱스가 필요할 수 있습니다.

제 프레젠테이션인 Really How to Design an Index을 읽고 자세히 알아보거나 동영상을 시청해 보세요.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿