검색 최적화 서비스¶
검색 최적화 서비스는 특정 유형의 조회 및 분석 쿼리의 성능을 크게 개선할 수 있습니다. 광범위한 필터링 조건자 세트가 지원됩니다(검색 최적화의 이점을 활용할 수 있는 쿼리 식별하기 참조).
참고
검색 최적화의 유무에 따른 실행 시간을 비교하는 자습서부터 시작하려면 검색 최적화 시작하기 를 참조하십시오.
검색 최적화 서비스의 목적은 다음을 포함하여 테이블에 대한 특정 유형의 쿼리 성능을 대폭 향상하는 것입니다.
테이블에 대한 선택적 포인트 조회 쿼리. 포인트 조회 쿼리에서는 1개 또는 몇 개의 고유 행만 반환합니다. 사용 사례의 예는 다음과 같습니다.
매우 선택적인 필터를 사용하여 중요한 대시보드에서 신속하게 응답을 수신해야 하는 비즈니스 사용자.
대용량 데이터를 탐색하고 데이터의 특정 하위 세트를 살펴보는 데이터 과학자.
광범위한 필터링 조건자 세트을 기반으로 작은 결과 세트를 검색하는 데이터 애플리케이션.
자세한 내용은 검색 최적화로 포인트 조회 쿼리 속도 높이기 섹션을 참조하십시오.
하위 문자열 및 정규식 검색(예: [ NOT ] LIKE, [ NOT ] ILIKE, [ NOT ] RLIKE 등). 자세한 내용은 검색 최적화로 하위 문자열 및 정규식 쿼리 속도 높이기 섹션을 참조하십시오.
다음 유형의 조건자를 사용하는 VARIANT, OBJECT 및 ARRAY (반정형) 열의 필드에 대한 쿼리:
같음 조건자.
IN 조건자.
ARRAY_CONTAINS 를 사용하는 조건자.
ARRAYS_OVERLAP 을 사용하는 조건자.
하위 문자열 및 정규식 조건자.
NULL 값 여부를 검사하는 조건자.
자세한 내용은 검색 최적화로 반정형 데이터 쿼리 속도 높이기 섹션을 참조하십시오.
GEOGRAPHY 값과 함께 선택한 지리 공간 함수를 사용하는 쿼리. 자세한 내용은 검색 최적화로 지리 공간 쿼리 속도 높이기 섹션을 참조하십시오.
검색 최적화 서비스의 이점을 활용할 수 있는 쿼리를 식별하면 해당 쿼리에 사용되는 열과 테이블에 대한 검색 최적화를 활성화 할 수 있습니다.
검색 최적화 서비스는 일반적으로 사용자에게 투명합니다. 쿼리는 검색 최적화 없이 작동하는 것과 동일하게 작동하는데, 일부 쿼리는 더 빠릅니다. 그러나 검색 최적화는 다른 특정 테이블 작업에 영향을 미칩니다. 자세한 내용은 검색에 최적화된 테이블 작업하기 섹션을 참조하십시오.
검색 최적화 서비스의 작동 방식¶
검색 쿼리 성능을 개선하기 위해 검색 최적화 서비스가 검색 액세스 경로 라는 영구 데이터 구조를 만들고 유지 관리합니다. 검색 액세스 경로는 각 마이크로 파티션 에서 찾을 수 있는 테이블 열의 값을 추적하여 테이블을 검사할 때 일부 마이크로 파티션을 건너뛸 수 있도록 합니다.
유지관리 서비스는 검색 액세스 경로를 생성한 후 유지관리를 수행합니다.
검색 최적화를 활성화하면, 유지관리 서비스가 조회를 수행하기 위해 필요한 데이터를 사용하여 검색 액세스 경로를 생성한 후 채웁니다.
검색 액세스 경로를 구축하는 데는 테이블 크기에 따라 상당한 시간이 걸릴 수 있습니다. 이 유지 관리 서비스는 백그라운드에서 작동하며 테이블에서 어떤 작업도 차단하지 않습니다. 검색 액세스 경로가 완전히 구축될 때까지 쿼리는 가속화되지 않습니다.
테이블의 데이터가 업데이트되면(예: 새 데이터 세트 로드 또는 DML 작업을 통해) 유지관리 서비스는 검색 액세스 경로를 자동으로 업데이트하여 데이터 변경 사항을 적용합니다.
검색 액세스 경로가 계속 업데이트되는 동안 쿼리가 실행되면 쿼리가 더 느리게 실행될 수 있지만 여전히 올바른 결과를 반환합니다.
각 테이블의 유지 관리 서비스 진행률은 SHOW TABLES 출력의 search_optimization_progress
열에 나타납니다. 새로 최적화된 테이블에서 검색 최적화의 성능 향상을 측정하기 전, 이 열에 테이블이 완전히 최적화되었음이 표시되는지 확인하십시오.
검색 액세스 경로 유지 관리는 투명하게 이루어집니다. 유지 관리 서비스를 실행하기 위해 가상 웨어하우스를 만들 필요는 없습니다. 그러나 유지 관리를 위한 저장소 및 컴퓨팅 리소스 비용이 있습니다. 비용에 대한 자세한 내용은 검색 최적화 비용 추정 및 관리 섹션을 참조하십시오.
쿼리 성능 최적화를 위한 기타 옵션¶
검색 최적화 서비스는 쿼리 성능을 최적화하기 위한 여러 방법 중 하나입니다. 다른 기술은 다음과 같습니다.
쿼리 가속.
테이블 클러스터링.
1개 이상의 구체화된 뷰 만들기(클러스터형 또는 비클러스터형).
다음 표에서 보듯이, 이들은 각각 서로 다른 장점이 있습니다.
특징 |
지원되는 쿼리 유형 |
참고 |
---|---|---|
검색 최적화 서비스 |
검색 최적화 서비스는 지원되는 데이터 타입 에 대해 이러한 유형의 검색 성능을 개선할 수 있습니다. |
|
필터 또는 집계가 있는 쿼리. LIMIT가 포함된 쿼리에는 ORDER BY도 포함되어야 합니다.
필터는 선택성이 뛰어나야 하며 ORDER BY 절은 카디널리티가 낮아야 합니다.
쿼리 가속은 임시 분석, 예측할 수 없는 데이터 볼륨이 있는 쿼리,
대규모 검사와 선택적 필터를 사용한 쿼리에서 잘 작동합니다.
|
쿼리 가속과 검색 최적화는 상호 보완적입니다. 둘 다 같은 쿼리를 가속화할 수 있습니다. 쿼리 가속과의 호환성 섹션을 참조하십시오. |
|
|
또한 구체화된 뷰를 사용하여 동일한 원본 테이블(또는 해당 테이블의 하위 세트)에서 서로 다른 클러스터링 키를 정의하거나 평면화된 JSON 또는 베리언트 데이터를 저장하여 한 번만 평면화하면 되도록 할 수 있습니다. 구체화된 뷰는 그 내부에 포함된 행 및 열로 구성된 하위 세트에 대해서만 성능을 개선할 수 있습니다. |
|
|
테이블은 1개 이상의 열 또는 식이 포함될 수 있는 단일 키에만 클러스터링될 수 있습니다. |
다음 테이블은 이러한 최적화에서의 저장소 또는 컴퓨팅 요금의 발생 여부를 보여줍니다.
저장소 요금 |
컴퓨팅 요금 |
|
---|---|---|
검색 최적화 서비스 |
✔ |
✔ |
Query Acceleration Service |
✔ |
|
구체화된 뷰 |
✔ |
✔ |
테이블 클러스터링 |
✔ [1] |
✔ |
쿼리 가속과의 호환성¶
검색 최적화와 쿼리 가속 은 함께 작동하여 쿼리 성능을 최적화할 수 있습니다. 먼저, 검색 최적화는 쿼리에 필요하지 않은 마이크로 파티션 을 정리할 수 있습니다. 그런 다음, 적합한 쿼리 의 경우 쿼리 가속화는 나머지 작업 중 일부를 서비스에서 제공하는 공유 컴퓨팅 리소스로 오프로드할 수 있습니다.
두 서비스로 모두 가속화되는 쿼리의 성능은 워크로드와 사용 가능한 리소스에 따라 다릅니다.
예¶
데이터가 포함된 테이블을 생성합니다.
create or replace table test_table (id int, c1 int, c2 string, c3 date) as
select * from values
(1, 3, '4', '1985-05-11'),
(2, 4, '3', '1996-12-20'),
(3, 2, '1', '1974-02-03'),
(4, 1, '2', '2004-03-09'),
(5, null, null, null);
SEARCH OPTIMIZATION 속성을 테이블에 추가합니다.
alter table test_table add search optimization;
검색 최적화 서비스를 사용할 수 있는 쿼리는 다음과 같습니다.
select * from test_table where id = 2;
select * from test_table where c2 = '1';
select * from test_table where c3 = '1985-05-11';
select * from test_table where c1 is null;
select * from test_table where c1 = 4 and c3 = '1996-12-20';
암시적 캐스트는 열이 아닌 상수에서 수행되므로 다음 쿼리에서는 검색 최적화 서비스를 사용할 수 있습니다.
select * from test_table where c2 = 2;
캐스트가 테이블의 열에서 수행되므로 다음에서는 검색 최적화 서비스를 사용할 수 없습니다.
select * from test_table where cast(c2 as number) = 2;
IN 절은 검색 최적화 서비스에서 지원됩니다.
select id, c1, c2, c3
from test_table
where id IN (2, 3)
order by id;
조건자가 검색 최적화 서비스에서 개별적으로 지원되는 경우에는 논리곱 AND
로 조인될 수 있으며 여전히 검색 최적화 서비스에서 지원됩니다.
select id, c1, c2, c3
from test_table
where c1 = 1
and
c3 = TO_DATE('2004-03-09')
order by id;
DELETE 및 UPDATE(및 MERGE)에서도 검색 최적화 서비스를 사용할 수 있습니다.
delete from test_table where id = 3;
update test_table set c1 = 99 where id = 4;