MySQL Group By 최적화
사실 group by 에 있어 서 가장 일반적인 실현 방법 은 전체 표 스 캔 을 한 번 하고 모든 group by 줄 을 임시 table 에 순서대로 저장 한 다음 에 그룹 식별 이나 취 합 작업 을 하 는 것 이다.이런 문 제 는 너무 복잡 하고 시간 적 으로 오래 걸 리 며 공간 적 소모 도 적지 않다 는 것 이다.이때 MySQL 은 색인 을 이용 하여 group by 를 최적화 할 수 있 습 니 다.
여기 서 loose index scan 이 무엇 인지 말 할 수 있 습 니 다. 공식 적 인 정의 에 따 르 면 이 방법 은 색인 중의 일부 데이터 만 스 캔 해 야 합 니 다. where 조건 을 만족 시 키 는 모든 데이터 가 아니 라 loose index scan 이 라 고 합 니 다.
다음은 어떤 상황 에서 loose index scan 을 사용 할 수 있 는 상황 입 니까?
단일 표 조회
2 Group by 중 가장 왼쪽 접두사 열 만 있 고 다른 열 은 없습니다.
3. max 와 min 집합 만 지원 합 니 다. 그리고 집합 할 열 은 group by 에 있 는 색인 이 어야 합 니 다.
4. group by 에 인용 되 지 않 은 색인 의 다른 부분 은 상수 여야 합 니 다.
5. 접두사 색인 은 지원 되 지 않 습 니 다.
t1 (c1, c2, c3, c4) 표 에 c1, c2, c3 열 을 포함 한 색인 이 있다 고 가정 하면 다음 조 회 는 모두 loose index scan 을 할 수 있 습 니 다.
SELECT c1, c2 FROM t1 GROUP BY c1, c2;
SELECT DISTINCT c1, c2 FROM t1;
SELECT c1, MIN(c2) FROM t1 GROUP BY c1;
SELECT c1, c2 FROM t1 WHERE c1 < const GROUP BY c1, c2;
SELECT MAX(c3), MIN(c3), c1, c2 FROM t1 WHERE c2 > const GROUP BY c1, c2;
SELECT c2 FROM t1 WHERE c1 < const GROUP BY c1, c2;
SELECT c1, c2 FROM t1 WHERE c3 = const GROUP BY c1, c2;
이것들 은 모두 베 낀 공식 문서 로 정확성 이 완전히 검증 되 지 않 았 다.
다음 SQL 에 서 는 loose index scan 을 사용 할 수 없습니다.
-- max min
SELECT c1, SUM(c2) FROM t1 GROUP BY c1;
--
SELECT c1, c2 FROM t1 GROUP BY c2, c3;
-- , group by , , WHERE c3 = const
SELECT c1, c3 FROM t1 GROUP BY c1, c2;
다른 취 합 함수 도 loose index scan 을 사용 할 수 있 습 니 다. 예 를 들 어 AVG (DISTINCT), SUM (DISTINCT), COUNT (DISTINCT) 등 입 니 다.
아래 의 이 문장 들 도 가능 하 다.
SELECT COUNT(DISTINCT c1), SUM(DISTINCT c1) FROM t1;
SELECT COUNT(DISTINCT c1, c2), COUNT(DISTINCT c2, c1) FROM t1;
많은 문 구 는 5.7 의 문서 에서 발췌 한 것 으로 정확성 이 검증 되 지 않 았 다. 비록 공식 문서 가 권위 라 고 하지만 책 을 믿 는 것 이 책 이 없 는 것 보다 못 하고 종이 에 있 는 것 이 끝 이 얕 아서 이 일 을 직접 해 야 한 다 는 것 을 잘 알 고 있다. 내일 주말 에 나 는 조목조목 테스트 한 후에 더욱.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.