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>const
GROUP BY c1, c2, c3;
이 동등성 때문에 GROUP BY
쿼리에 적용 할 수있는 최적화는 DISTINCT
절이있는 쿼리에도 적용 할 수 있습니다. 따라서 DISTINCT
쿼리 최적화의 가능성에 대한 자세한 내용은 섹션 8.2.1.16 "GROUP BY 최적화" 를 참조하십시오.
LIMIT
를 row_count
DISTINCT
과 함께 사용하면 MySQL은 row_count
고유 행이 발견되면 즉시 중지합니다.
쿼리에 지정된 모든 테이블의 컬럼을 사용하지 않는 경우, MySQL은 첫 번째 일치가 발견되면 즉시 미사용 테이블의 스캔을 중지합니다. 다음의 예에서는 t1
이 t2
의 전에 사용되고 (이것은 EXPLAIN
에서 확인할 수 있습니다), MySQL은 t2
( t1
의 특정 행)에서 첫 번째 행을 찾을 때 t2
에서 읽기를 중지합니다.
SELECT DISTINCT t1.a FROM t1, t2 where t1.a = t2.a;