2015-01-24 4 views
2

나는 미국에 거주하는 사람과 그 주, 카운티 및 합의를 기록하는 2 억 5 천만 레코드가 들어있는 테이블을 가지고 있습니다. 나는 성, 지역, 소 지역과 장소에 결합 된 인덱스를 뒀다여러 열에 대한 인덱스 사용

mysql

: 같은 단순화 된 버전 보인다. 다음 쿼리는 정확히 같은 시간에 실행 :

나는 왼쪽에서 난 당신이 모든 열을 조회했다 인덱스를 사용하는 것을 생각으로 첫 번째 쿼리는 인덱스를 사용하지 않을 것이라고 인상했다
SELECT SQL_NO_CACHE surname, place, count(*) as cnt FROM `ustest` group by place, surname; 

SELECT SQL_NO_CACHE surname, region, count(*) as cnt FROM `ustest` group by region, surname; 

오른쪽으로.

MySQL이 그러한 인스턴스의 여러 열에 어떻게 인덱스를 사용하는지 설명 할 수 있습니까?

+1

나는 더 구체적인 색인이 부족할 때 더 많은 차원으로 색인을 사용한다고 생각합니다. 나도 몰라, 교육받은 추측. –

답변

1

EXPLAIN 출력을 보지 않고도 쿼리의 실행 계획을 자세히 설명하기는 어렵습니다.

그러나 두 가지 밖으로 뛰어 :

  1. 두 쿼리가 계정에 테이블의 모든 행을 취해야합니다 (당신이 WHERE 절을하지 않아도됩니다).
  2. surname을 기준으로 복합 색인을 검색하여 두 색인을 모두 만족시킬 수 있습니다. 항목 수를 계산하기 때문에 느슨한 인덱스 스캔이 아닌 타이트한 스캔이 필요합니다. (해당 내용을 읽을 수 있습니다.)

그래서 둘 다 동일한 실행 계획을 가지고있을 수 있습니다.

+0

감사합니다. 예. 두 가지에 대한 Explain 출력은 동일합니다. 나는 색인을 사용해서는 안된다는 인상을 받고있었습니다. –

관련 문제