검색 최적화 서비스

검색 최적화 서비스는 특정 유형의 조회 및 분석 쿼리의 성능을 크게 개선할 수 있습니다. 광범위한 필터링 조건자 세트가 지원됩니다(검색 최적화의 이점을 활용할 수 있는 쿼리 식별하기 참조).

참고

검색 최적화의 유무에 따른 실행 시간을 비교하는 자습서부터 시작하려면 검색 최적화 시작하기 를 참조하십시오.

검색 최적화 서비스의 목적은 다음을 포함하여 테이블에 대한 특정 유형의 쿼리 성능을 대폭 향상하는 것입니다.

검색 최적화 서비스의 이점을 활용할 수 있는 쿼리를 식별하면 해당 쿼리에 사용되는 열과 테이블에 대한 검색 최적화를 활성화 할 수 있습니다.

검색 최적화 서비스는 일반적으로 사용자에게 투명합니다. 쿼리는 검색 최적화 없이 작동하는 것과 동일하게 작동하는데, 일부 쿼리는 더 빠릅니다. 그러나 검색 최적화는 다른 특정 테이블 작업에 영향을 미칩니다. 자세한 내용은 검색에 최적화된 테이블 작업하기 섹션을 참조하십시오.

검색 최적화 서비스의 작동 방식

검색 쿼리 성능을 개선하기 위해 검색 최적화 서비스가 검색 액세스 경로 라는 영구 데이터 구조를 만들고 유지 관리합니다. 검색 액세스 경로는 각 마이크로 파티션 에서 찾을 수 있는 테이블 열의 값을 추적하여 테이블을 검사할 때 일부 마이크로 파티션을 건너뛸 수 있도록 합니다.

유지관리 서비스는 검색 액세스 경로를 생성한 후 유지관리를 수행합니다.

  • 검색 최적화를 활성화하면, 유지관리 서비스가 조회를 수행하기 위해 필요한 데이터를 사용하여 검색 액세스 경로를 생성한 후 채웁니다.

    검색 액세스 경로를 구축하는 데는 테이블 크기에 따라 상당한 시간이 걸릴 수 있습니다. 이 유지 관리 서비스는 백그라운드에서 작동하며 테이블에서 어떤 작업도 차단하지 않습니다. 검색 액세스 경로가 완전히 구축될 때까지 쿼리는 가속화되지 않습니다.

  • 테이블의 데이터가 업데이트되면(예: 새 데이터 세트 로드 또는 DML 작업을 통해) 유지관리 서비스는 검색 액세스 경로를 자동으로 업데이트하여 데이터 변경 사항을 적용합니다.

    검색 액세스 경로가 계속 업데이트되는 동안 쿼리가 실행되면 쿼리가 더 느리게 실행될 수 있지만 여전히 올바른 결과를 반환합니다.

각 테이블의 유지 관리 서비스 진행률은 SHOW TABLES 출력의 search_optimization_progress 열에 나타납니다. 새로 최적화된 테이블에서 검색 최적화의 성능 향상을 측정하기 전, 이 열에 테이블이 완전히 최적화되었음이 표시되는지 확인하십시오.

검색 액세스 경로 유지 관리는 투명하게 이루어집니다. 유지 관리 서비스를 실행하기 위해 가상 웨어하우스를 만들 필요는 없습니다. 그러나 유지 관리를 위한 저장소 및 컴퓨팅 리소스 비용이 있습니다. 비용에 대한 자세한 내용은 검색 최적화 비용 추정 및 관리 섹션을 참조하십시오.

쿼리 성능 최적화를 위한 기타 옵션

검색 최적화 서비스는 쿼리 성능을 최적화하기 위한 여러 방법 중 하나입니다. 다른 기술은 다음과 같습니다.

  • 쿼리 가속.

  • 테이블 클러스터링.

  • 1개 이상의 구체화된 뷰 만들기(클러스터형 또는 비클러스터형).

다음 표에서 보듯이, 이들은 각각 서로 다른 장점이 있습니다.

특징

지원되는 쿼리 유형

참고

검색 최적화 서비스

검색 최적화 서비스는 지원되는 데이터 타입 에 대해 이러한 유형의 검색 성능을 개선할 수 있습니다.

Query Acceleration Service

필터 또는 집계가 있는 쿼리. LIMIT가 포함된 쿼리에는 ORDER BY도 포함되어야 합니다.
필터는 선택성이 뛰어나야 하며 ORDER BY 절은 카디널리티가 낮아야 합니다.

쿼리 가속은 임시 분석, 예측할 수 없는 데이터 볼륨이 있는 쿼리,
대규모 검사와 선택적 필터를 사용한 쿼리에서 잘 작동합니다.

쿼리 가속과 검색 최적화는 상호 보완적입니다. 둘 다 같은 쿼리를 가속화할 수 있습니다. 쿼리 가속과의 호환성 섹션을 참조하십시오.

구체화된 뷰

  • 같음 검색.

  • 범위 검색.

  • 정렬 작업.

또한 구체화된 뷰를 사용하여 동일한 원본 테이블(또는 해당 테이블의 하위 세트)에서 서로 다른 클러스터링 키를 정의하거나 평면화된 JSON 또는 베리언트 데이터를 저장하여 한 번만 평면화하면 되도록 할 수 있습니다.

구체화된 뷰는 그 내부에 포함된 행 및 열로 구성된 하위 세트에 대해서만 성능을 개선할 수 있습니다.

테이블 클러스터링하기

  • 같음 검색.

  • 범위 검색.

테이블은 1개 이상의 열 또는 식이 포함될 수 있는 단일 키에만 클러스터링될 수 있습니다.

다음 테이블은 이러한 최적화에서의 저장소 또는 컴퓨팅 요금의 발생 여부를 보여줍니다.

저장소 요금

컴퓨팅 요금

검색 최적화 서비스

Query Acceleration Service

구체화된 뷰

테이블 클러스터링

1

1

재클러스터링 프로세스에서는 기존 파티션을 새 파티션으로 다시 쓰므로 fail-safe 저장소의 크기가 증가할 수 있습니다. (재클러스터링에서는 새 행이 더해지지 않고 기존 행만 재구성합니다.) 자세한 내용은 재클러스터링의 크레딧 및 저장소 영향 섹션을 참조하십시오.

쿼리 가속과의 호환성

검색 최적화와 쿼리 가속 은 함께 작동하여 쿼리 성능을 최적화할 수 있습니다. 먼저, 검색 최적화는 쿼리에 필요하지 않은 마이크로 파티션 을 정리할 수 있습니다. 그런 다음, 적합한 쿼리 의 경우 쿼리 가속화는 나머지 작업 중 일부를 서비스에서 제공하는 공유 컴퓨팅 리소스로 오프로드할 수 있습니다.

두 서비스로 모두 가속화되는 쿼리의 성능은 워크로드와 사용 가능한 리소스에 따라 다릅니다.

데이터가 포함된 테이블을 생성합니다.

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);
Copy

SEARCH OPTIMIZATION 속성을 테이블에 추가합니다.

alter table test_table add search optimization;
Copy

검색 최적화 서비스를 사용할 수 있는 쿼리는 다음과 같습니다.

select * from test_table where id = 2;
Copy
select * from test_table where c2 = '1';
Copy
select * from test_table where c3 = '1985-05-11';
Copy
select * from test_table where c1 is null;
Copy
select * from test_table where c1 = 4 and c3 = '1996-12-20';
Copy

암시적 캐스트는 열이 아닌 상수에서 수행되므로 다음 쿼리에서는 검색 최적화 서비스를 사용할 수 있습니다.

select * from test_table where c2 = 2;
Copy

캐스트가 테이블의 열에서 수행되므로 다음에서는 검색 최적화 서비스를 사용할 수 없습니다.

select * from test_table where cast(c2 as number) = 2;
Copy

IN 절은 검색 최적화 서비스에서 지원됩니다.

select id, c1, c2, c3
    from test_table
    where id IN (2, 3)
    order by id;
Copy

조건자가 검색 최적화 서비스에서 개별적으로 지원되는 경우에는 논리곱 AND 로 조인될 수 있으며 여전히 검색 최적화 서비스에서 지원됩니다.

select id, c1, c2, c3
    from test_table
    where c1 = 1
       and
          c3 = TO_DATE('2004-03-09')
    order by id;
Copy

DELETE 및 UPDATE(및 MERGE)에서도 검색 최적화 서비스를 사용할 수 있습니다.

delete from test_table where id = 3;
Copy
update test_table set c1 = 99 where id = 4;
Copy