쿼리 인사이트를 사용하여 성능 개선하기

쿼리 성능에 영향을 미치는 조건이 있는 경우 Snowflake는 이러한 조건에 대한 인사이트를 제공합니다. 각 인사이트에는 쿼리 성능에 미치는 영향을 설명하고 성능 개선을 위한 일반적인 권장 사항을 제공하는 메시지가 포함됩니다.

:doc:`QUERY_INSIGHTS 뷰</sql-reference/account-usage/query_insights>`를 쿼리하여 이러한 인사이트에 액세스할 수 있습니다.

다음 섹션에서는 쿼리 인사이트에 대한 세부 정보를 제공합니다.

인사이트 유형 목록

:doc:`QUERY_INSIGHTS 뷰</sql-reference/account-usage/query_insights>`에서는 다음을 포함한 인사이트를 제공합니다.

  • 감지된 조건과 이 조건이 쿼리 성능에 미치는 영향에 대한 메시지.

  • 조건을 생성한 쿼리 부분에 대한 세부 정보.

  • 조건이 성능에 부정적인 영향을 미치는 경우 조건을 해결하기 위해 제안된 다음 단계.

다음 테이블에는 유형 ID별 인사이트 유형이 나열되어 있습니다.

유형 ID

인사이트

QUERY_INSIGHT_NO_FILTER_ON_TOP_OF_TABLE_SCAN

테이블 스캔에 필터 없음

QUERY_INSIGHT_INAPPLICABLE_FILTER_ON_TABLE_SCAN

필터를 적용할 수 없음

QUERY_INSIGHT_UNSELECTIVE_FILTER

필터가 선택적이지 않음

QUERY_INSIGHT_FILTER_WITH_CLUSTERING_KEY

필터가 클러스터링 키를 사용함

QUERY_INSIGHT_SEARCH_OPTIMIZATION_USED

쿼리가 검색 최적화의 이점을 얻음

QUERY_INSIGHT_JOIN_WITH_NO_JOIN_CONDITION

조인 조건이 없는 조인

QUERY_INSIGHT_NESTED_EXPLODING_JOIN

급증하는 조인(중첩 조인)

QUERY_INSIGHT_EXPLODING_JOIN

급증하는 조인(중첩되지 않음)

QUERY_INSIGHT_REMOTE_SPILLAGE

원격 유출

테이블 스캔에 필터 없음

쿼리 또는 하위 쿼리에는 WHERE 절이 없으므로 쿼리가 전체 테이블을 스캔하고 의도한 행보다 더 많은 행을 반환할 수 있습니다.

성능을 개선하려면 WHERE 절을 추가하여 스캔된 데이터의 양을 줄입니다.

필터를 적용할 수 없음

WHERE 절은 행을 필터링하지 않으므로, 쿼리가 의도한 데이터보다 더 많은 데이터를 스캔할 수 있습니다.

성능을 개선하려면 WHERE 절에 더 선택적인 조건을 추가하거나 기존 조건을 더 선택적으로 만듭니다.

필터가 선택적이지 않음

WHERE 절은 행 수를 크게 줄이지 않으므로 쿼리가 의도한 데이터보다 더 많은 데이터를 스캔할 수 있습니다.

필터를 적용할 수 없음 인사이트와 달리, 이 인사이트는 WHERE 절이 일부 행을 필터링하고 있지만 더 선택적일 수 있었음을 나타냅니다.

성능을 개선하려면 WHERE 절에 더 선택적인 조건을 추가하거나 기존 조건을 더 선택적으로 만듭니다.

필터가 클러스터링 키를 사용함

쿼리가 :doc:`테이블의 클러스터링 키</user-guide/tables-clustering-keys>`에 대한 필터링을 통해 이점을 얻었습니다.

쿼리가 검색 최적화의 이점을 얻음

쿼리가 :doc:`검색 최적화</user-guide/search-optimization-service>`를 위해 구성된 열에 대한 필터링을 통해 이점을 얻었습니다.

조인 조건이 없는 조인

조인에 조인 조건이 누락되었습니다. 결과는 가능한 모든 행 조합을 반환하는 :ref:`크로스 조인<label-querying_join_cross>`입니다.

이 조인에 의해 생성되는 행 수를 줄이려면 하나 이상의 조인 조건을 지정합니다.

급증하는 조인(중첩 조인)

하나 이상의 다른 조인의 출력을 포함하는 조인이 조인되는 테이블에 있는 행보다 더 많은 행을 반환합니다. 이는 하위 조인의 조인 조건에 문제가 있음을 나타낼 수 있습니다.

조인이 조인된 테이블에 포함된 행보다 더 많은 행을 생성하지 않도록 하려면 하위 조인에 대한 조인 조건을 추가하거나 변경합니다. 또한 하위 조인에 사용된 하위 쿼리에 WHERE 절을 추가하면 반환되는 행 수가 줄어들 수 있습니다.

급증하는 조인(중첩되지 않음)

두 데이터 세트(예: 테이블, 뷰 또는 테이블 함수 호출의 출력)의 조인은 조인된 테이블에 포함된 행보다 더 많은 행을 반환합니다. 이는 조인 조건에 문제가 있음을 나타낼 수 있습니다.

조인이 조인된 테이블에 있는 행보다 더 많은 행을 생성하지 않도록 하려면 조인 조건을 추가하거나 변경합니다. 또한 이 조인에서 사용하는 하위 조인에 WHERE 절을 추가하면 반환되는 행 수가 줄어들 수 있습니다.

원격 유출

이 쿼리는 웨어하우스가 저장할 수 있는 용량보다 더 많은 데이터를 스캔했습니다. 결과적으로 웨어하우스에서 저장소로 :ref:`데이터가 유출<label-spillage>`되어 쿼리 처리 속도가 느려졌습니다.

이 문제를 방지하려면 용량이 더 큰 대용량 웨어하우스를 사용합니다. 대용량 웨어하우스를 사용할 수 없는 경우 쿼리를 변경하여 데이터를 더 작은 배치로 처리합니다.

제한 사항

  • 데이터베이스에 대해 수행되고 웨어하우스에서 처리되는 SQL 쿼리에 대한 인사이트가 생성됩니다.

  • 인사이트는 다음에 대해 생성되지 않습니다.

    • 보안 오브젝트와 관련된 쿼리.

    • 하이브리드 테이블에 대해 실행된 쿼리(Unistore).

    • Native Apps에서 생성된 쿼리.

    • EXPLAIN 쿼리.

    • :doc:`결과를 재사용</user-guide/querying-persisted-results>`하는 쿼리.