Aceleração consultas de subcadeias de caracteres e expressões regulares com otimização de pesquisa

A otimização de pesquisa pode melhorar o desempenho das consultas com predicados que buscam subcadeias de caracteres ou usam expressões regulares em texto ou dados semiestruturados. Para obter detalhes sobre como as pesquisas de subcadeia de caracteres funcionam com dados semiestruturados, consulte Aceleração de consultas de dados semiestruturados com otimização de pesquisa.

Esse recurso inclui predicados que usam:

Nota

Você deve habilitar este recurso para colunas específicas usando a cláusula ON no comando ALTER TABLE … ADD SEARCH OPTIMIZATION. (Ativar a otimização de pesquisa no nível da tabela não otimiza a pesquisa de subcadeia de caracteres.) Por exemplo:

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

As pesquisas de subcadeia de caracteres não são melhoradas se você omitir a cláusula ON.

O serviço de otimização de pesquisa pode melhorar o desempenho da busca de subcadeias de caracteres com 5 ou mais caracteres. (Subcadeias de caracteres mais seletivas podem resultar em melhor desempenho). O serviço de otimização de pesquisa não utiliza caminhos de acesso de pesquisa para os seguintes predicados porque a subcadeia de caracteres tem menos de 5 caracteres:

LIKE '%TEST%'
Copy

Para os seguintes predicados, o serviço de otimização de pesquisa pode otimizar essa consulta, usando caminhos de acesso de pesquisa para buscar as subcadeias de caracteres para SEARCH e OPTIMIZED. Entretanto, os caminhos de acesso de pesquisa não são usados para IS porque a subcadeia de caracteres tem menos de 5 caracteres.

LIKE '%SEARCH%IS%OPTIMIZED%'
Copy

Para consultas que utilizam RLIKE, REGEXP e REGEXP_LIKE contra o texto:

  • O argumento subject deve ser uma coluna TEXT em uma tabela que tenha a otimização de pesquisa habilitada.

  • O argumento pattern deve ser uma constante de cadeia de caracteres.

Para expressões regulares, o serviço de otimização de pesquisa funciona melhor quando:

  • O padrão contém pelo menos uma subcadeia de caracteres literal que tem 5 ou mais caracteres de comprimento.

  • O padrão especifica que a subcadeia de caracteres deve aparecer pelo menos uma vez.

Por exemplo, o seguinte padrão especifica que string deve aparecer uma ou mais vezes no sujeito:

RLIKE '(string)+'
Copy

O serviço de otimização de pesquisa pode melhorar o desempenho das consultas com os seguintes padrões, pois cada predicado especifica que uma subcadeia de caracteres de 5 ou mais caracteres deve aparecer pelo menos uma vez. (Note que o primeiro exemplo usa uma constante de cadeia de caracteres entre cifrões para evitar o escape dos caracteres de barras invertidas).

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

Em contraste, a otimização de pesquisa não utiliza caminhos de acesso de pesquisa para consultas com os seguintes padrões:

  • Padrões sem subcadeias de caracteres:

    RLIKE '.*[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
    
    Copy
  • Padrões que contêm apenas subcadeias de caracteres com menos de 5 caracteres:

    RLIKE '.*tel=[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
    
    Copy
  • Padrões que utilizam o operador de alternância em que uma opção é uma subcadeia de caracteres com menos de 5 caracteres:

    RLIKE '.*(option1|option2|opt3).*'
    
    Copy
  • Padrões nos quais a subcadeia de caracteres é opcional:

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

Mesmo quando os caracteres literais da subcadeia de caracteres são menos de 5, o serviço de otimização de pesquisa ainda pode melhorar o desempenho da consulta se a expansão da expressão regular produzir um literal da subcadeia de caracteres que tenha 5 caracteres ou mais.

Por exemplo, considere o padrão:

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

Neste exemplo:

  • Embora os literais da subcadeia de caracteres (por exemplo, st=, CA etc.) sejam menos de 5, o serviço de otimização de pesquisa reconhece que a subcadeia de caracteres st=CA, st=AZ ou st=NV (cada um deles com 5 caracteres) deve aparecer no texto.

  • Da mesma forma, mesmo que o literal da subcadeia de caracteres --> seja menor que 5 caracteres, o serviço de otimização de pesquisa determina que a subcadeia de caracteres -->--> (que é maior que 5 caracteres) deve aparecer no texto.

O serviço de otimização de pesquisa pode usar caminhos de acesso de pesquisa para corresponder a essas subcadeias de caracteres, o que pode melhorar o desempenho da consulta.