검색 최적화로 하위 문자열 및 정규식 쿼리 속도 높이기

검색 최적화는 텍스트 또는 반정형 데이터에서 하위 문자열을 검색하거나 정규식을 사용하는 조건자로 쿼리의 성능을 개선할 수 있습니다. 하위 문자열 검색이 반정형 데이터에서 작동하는 방식에 대한 자세한 내용은 검색 최적화로 반정형 데이터 쿼리 속도 높이기 섹션을 참조하십시오.

이 기능에는 다음을 사용하는 조건자가 포함됩니다.

참고

ALTER TABLE … ADD SEARCH OPTIMIZATION 명령에서 ON 절을 사용하여 특정 열에 대해 이 기능을 활성화해야 합니다. (테이블 수준에서 검색 최적화를 활성화해도 하위 문자열 검색은 최적화되지 않습니다.) 예:

ALTER TABLE mytable ADD SEARCH OPTIMIZATION ON SUBSTRING(mycol);
Copy

ON 절을 생략하면 하위 문자열 검색이 최적화되지 않습니다.

검색 최적화 서비스는 5자 이상의 하위 문자열을 검색할 때 성능을 개선할 수 있습니다. (선택적 하위 문자열이 많을수록 성능을 향상할 수 있습니다.) 하위 문자열이 5자보다 짧으므로 검색 최적화 서비스에서는 다음 조건자에 대해 검색 액세스 경로를 사용하지 않습니다.

LIKE '%TEST%'
Copy

다음 조건자의 경우 검색 최적화 서비스는 이 쿼리를 최적화하여 검색 액세스 경로를 사용해 SEARCHOPTIMIZED 에 대한 하위 문자열을 검색할 수 있습니다. 하지만 하위 문자열이 5자보다 짧으므로 IS 에는 검색 액세스 경로가 사용되지 않습니다.

LIKE '%SEARCH%IS%OPTIMIZED%'
Copy

텍스트에 대해 RLIKE, REGEXP, REGEXP_LIKE를 사용하는 쿼리의 경우:

  • subject 인자는 검색 최적화가 활성화된 테이블의 TEXT 열이어야 합니다.

  • pattern 인자는 문자열 상수여야 합니다.

정규식의 경우 검색 최적화 서비스는 다음과 같은 때에 가장 효과적입니다.

  • 패턴에 길이가 5자 이상인 하위 문자열 리터럴이 하나 이상 포함됩니다.

  • 패턴은 하위 문자열이 한 번 이상 나타나야 하는 것으로 지정합니다.

예를 들어, 다음 패턴은 string 이 제목에 한 번 이상 나타나야 하는 것으로 지정합니다.

RLIKE '(string)+'
Copy

각 조건자가 5자 이상의 하위 문자열이 한 번 이상 나타나야 한다고 지정하므로 검색 최적화 서비스는 다음 패턴을 사용해 쿼리 성능을 개선할 수 있습니다. (첫 번째 예에서는 백슬래시 문자를 이스케이프하지 않도록 달러 인용 기호로 묶인 문자열 상수 를 사용합니다.)

RLIKE $$.*email=[\w\.]+@snowflake\.com.*$$
Copy
RLIKE '.*country=(Germany|France|Spain).*'
Copy
RLIKE '.*phone=[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
Copy

반대로, 검색 최적화는 다음 패턴의 쿼리에 대해 검색 액세스 경로를 사용하지 않습니다.

  • 부분 문자열이 없는 패턴:

    RLIKE '.*[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
    
    Copy
  • 5자 미만의 하위 문자열만 포함하는 패턴:

    RLIKE '.*tel=[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
    
    Copy
  • 한 옵션이 5자 미만의 하위 문자열인 대체 연산자를 사용하는 패턴:

    RLIKE '.*(option1|option2|opt3).*'
    
    Copy
  • 하위 문자열이 선택 사항인 패턴:

    RLIKE '.*[a-zA-z]+(string)?[0-9]+.*'
    
    Copy

하위 문자열 리터럴이 5자 미만일 때도 정규식을 확장하여 5자 이상의 하위 문자열 리터럴을 생성할 경우 검색 최적화 서비스는 쿼리 성능을 계속 개선할 수 있습니다.

예를 들어 다음 패턴을 생각해 보십시오.

.*st=(CA|AZ|NV).*(-->){2,4}.*
Copy

이 예에서는 다음과 같습니다.

  • 하위 문자열 리터럴(예: st=, CA 등)이 5자 미만이지만, 검색 최적화 서비스는 하위 문자열 st=CA, st=AZ 또는 st=NV (각각의 길이는 5자)가 텍스트에 나타나야 함을 인식합니다.

  • 마찬가지로, 하위 문자열 리터럴 --> 이 5자 미만이더라도 검색 최적화 서비스는 (5자보다 긴) 하위 문자열 -->--> 이 텍스트에 나타나야 한다고 결정합니다.

검색 최적화 서비스는 검색 액세스 경로를 사용하여 이러한 하위 문자열을 일치시킬 수 있으며, 이를 통해 쿼리 성능을 개선할 수 있습니다.