검색 최적화로 하위 문자열 및 정규식 쿼리 속도 높이기¶
검색 최적화는 텍스트 또는 반정형 데이터에서 하위 문자열을 검색하거나 정규식을 사용하는 조건자로 쿼리의 성능을 개선할 수 있습니다. 하위 문자열 검색이 반정형 데이터에서 작동하는 방식에 대한 자세한 내용은 검색 최적화로 반정형 데이터 쿼리 속도 높이기 섹션을 참조하십시오.
이 기능에는 다음을 사용하는 조건자가 포함됩니다.
참고
ALTER TABLE … ADD SEARCH OPTIMIZATION 명령에서 ON 절을 사용하여 특정 열에 대해 이 기능을 활성화해야 합니다. (테이블 수준에서 검색 최적화를 활성화해도 하위 문자열 검색은 최적화되지 않습니다.) 예:
ALTER TABLE mytable ADD SEARCH OPTIMIZATION ON SUBSTRING(mycol);
ON 절을 생략하면 하위 문자열 검색이 최적화되지 않습니다.
검색 최적화 서비스는 5자 이상의 하위 문자열을 검색할 때 성능을 개선할 수 있습니다. (선택적 하위 문자열이 많을수록 성능을 향상할 수 있습니다.) 하위 문자열이 5자보다 짧으므로 검색 최적화 서비스에서는 다음 조건자에 대해 검색 액세스 경로를 사용하지 않습니다.
LIKE '%TEST%'
다음 조건자의 경우 검색 최적화 서비스는 이 쿼리를 최적화하여 검색 액세스 경로를 사용해 SEARCH
및 OPTIMIZED
에 대한 하위 문자열을 검색할 수 있습니다. 하지만 하위 문자열이 5자보다 짧으므로 IS
에는 검색 액세스 경로가 사용되지 않습니다.
LIKE '%SEARCH%IS%OPTIMIZED%'
텍스트에 대해 RLIKE, REGEXP, REGEXP_LIKE를 사용하는 쿼리의 경우:
subject
인자는 검색 최적화가 활성화된 테이블의 TEXT 열이어야 합니다.pattern
인자는 문자열 상수여야 합니다.
정규식의 경우 검색 최적화 서비스는 다음과 같은 때에 가장 효과적입니다.
패턴에 길이가 5자 이상인 하위 문자열 리터럴이 하나 이상 포함됩니다.
패턴은 하위 문자열이 한 번 이상 나타나야 하는 것으로 지정합니다.
예를 들어, 다음 패턴은 string
이 제목에 한 번 이상 나타나야 하는 것으로 지정합니다.
RLIKE '(string)+'
각 조건자가 5자 이상의 하위 문자열이 한 번 이상 나타나야 한다고 지정하므로 검색 최적화 서비스는 다음 패턴을 사용해 쿼리 성능을 개선할 수 있습니다. (첫 번째 예에서는 백슬래시 문자를 이스케이프하지 않도록 달러 인용 기호로 묶인 문자열 상수 를 사용합니다.)
RLIKE $$.*email=[\w\.]+@snowflake\.com.*$$RLIKE '.*country=(Germany|France|Spain).*'RLIKE '.*phone=[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
반대로, 검색 최적화는 다음 패턴의 쿼리에 대해 검색 액세스 경로를 사용하지 않습니다.
부분 문자열이 없는 패턴:
RLIKE '.*[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
5자 미만의 하위 문자열만 포함하는 패턴:
RLIKE '.*tel=[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
한 옵션이 5자 미만의 하위 문자열인 대체 연산자를 사용하는 패턴:
RLIKE '.*(option1|option2|opt3).*'
하위 문자열이 선택 사항인 패턴:
RLIKE '.*[a-zA-z]+(string)?[0-9]+.*'
하위 문자열 리터럴이 5자 미만일 때도 정규식을 확장하여 5자 이상의 하위 문자열 리터럴을 생성할 경우 검색 최적화 서비스는 쿼리 성능을 계속 개선할 수 있습니다.
예를 들어 다음 패턴을 생각해 보십시오.
.*st=(CA|AZ|NV).*(-->){2,4}.*
이 예에서는 다음과 같습니다.
하위 문자열 리터럴(예:
st=
,CA
등)이 5자 미만이지만, 검색 최적화 서비스는 하위 문자열st=CA
,st=AZ
또는st=NV
(각각의 길이는 5자)가 텍스트에 나타나야 함을 인식합니다.마찬가지로, 하위 문자열 리터럴
-->
이 5자 미만이더라도 검색 최적화 서비스는 (5자보다 긴) 하위 문자열-->-->
이 텍스트에 나타나야 한다고 결정합니다.
검색 최적화 서비스는 검색 액세스 경로를 사용하여 이러한 하위 문자열을 일치시킬 수 있으며, 이를 통해 쿼리 성능을 개선할 수 있습니다.