8.2.1.17 DISTINCT 최적화
ORDER BY 와 결합 된 DISTINCT 는 종종 임시 테이블이 필요합니다.
DISTINCT 는 GROUP BY 를 사용할 수 있기 때문에 MySQL이 ORDER BY 또는 HAVING 절에서 선택한 컬럼의 일부분 컬럼을 어떻게 처리 하는지를 살펴 보자. 섹션 12.19.3 "MySQL의 GROUP BY 처리" 를 참조하십시오.
대부분의 경우 DISTINCT 절은 GROUP BY 의 특별한 경우로 생각할 수 있습니다. 예를 들어, 다음 두 쿼리는 동일합니다.
SELECT DISTINCT c1, c2, c3 FROM t1 WHERE c1>const; SELECT c1, c2, c3 FROM t1 WHERE c1>constGROUP BY c1, c2, c3;
이 동등성 때문에 GROUP BY 쿼리에 적용 할 수있는 최적화는 DISTINCT 절이있는 쿼리에도 적용 할 수 있습니다. 따라서 DISTINCT 쿼리 최적화의 가능성에 대한 자세한 내용은 섹션 8.2.1.16 "GROUP BY 최적화" 를 참조하십시오.
LIMIT 를 row_countDISTINCT 과 함께 사용하면 MySQL은 row_count 고유 행이 발견되면 즉시 중지합니다.
쿼리에 지정된 모든 테이블의 컬럼을 사용하지 않는 경우, MySQL은 첫 번째 일치가 발견되면 즉시 미사용 테이블의 스캔을 중지합니다. 다음의 예에서는 t1 이 t2 의 전에 사용되고 (이것은 EXPLAIN 에서 확인할 수 있습니다), MySQL은 t2 ( t1 의 특정 행)에서 첫 번째 행을 찾을 때 t2 에서 읽기를 중지합니다.
SELECT DISTINCT t1.a FROM t1, t2 where t1.a = t2.a;