ORDER BY 키 최적화와 materialized view 활용을 살펴봅니다.
이러한 접근 방식을 통해 쿼리 시간을 수 초에서 밀리초 수준으로 줄이는 방법을 알아보겠습니다.
ORDER BY 키 최적화
project 및 subproject 컬럼을 기준으로 필터링된다고 가정해 보겠습니다.
이 경우 이 컬럼들을 정렬 키에 추가하는 것이 좋습니다. 또한 시간 조건으로도 쿼리하므로 time 컬럼도 함께 추가하는 것이 좋습니다.
이제 wikistat와 동일한 컬럼 타입을 가지지만 (project, subproject, time)으로 정렬되는 테이블의 다른 버전을 만들어 보겠습니다.
| 쿼리 | (time) | (project, subproject, time) |
|---|---|---|
| 2.381 sec | 1.660 sec | |
| 2.148 sec | 0.058 sec | |
| 2.192 sec | 0.012 sec | |
| 2.968 sec | 0.010 sec |
materialized view
materialized view 생성
대상 테이블 백필
wikistat 테이블에 새 레코드가 삽입될 때만 채워지므로, 백필이 필요합니다.
가장 쉬운 방법은 뷰의 SELECT 쿼리(변환)를 사용해 materialized view의 대상 테이블에 직접 삽입하는 INSERT INTO SELECT SQL 문을 사용하는 것입니다:
- Null table engine을 사용하는 임시 테이블 생성
- 평소 사용하는 materialized view의 복사본을 해당 임시 테이블에 연결
INSERT INTO SELECT쿼리를 사용해 원시 데이터 세트의 모든 데이터를 해당 임시 테이블로 복사- 임시 테이블과 임시 materialized view를 삭제합니다.
wikistat_backfill에서 데이터를 읽어 wikistat_top에 쓰는 materialized view를 생성합니다
wikistat 테이블을 사용해 wikistat_backfill을 채웁니다: