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.

As seções a seguir fornecem mais informações sobre o suporte de otimização de pesquisa para consultas de substring e expressão regular:

Ativação da otimização de pesquisa para consultas de substring e expressão regular

Para melhorar o desempenho das consultas de substring e expressão regular em uma tabela, use a cláusula ON SUBSTRING no comando ALTER TABLE … ADD SEARCH OPTIMIZATION para colunas específicas.

Por exemplo:

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

Para obter mais informações, consulte Habilitação e desabilitação da otimização de pesquisa.

Predicados compatíveis

O serviço de otimização de pesquisa pode melhorar o desempenho de consultas com predicados que usam:

O serviço de otimização de pesquisa pode melhorar o desempenho ao pesquisar substrings com cinco ou mais caracteres. (Subcadeias de caracteres mais seletivas podem resultar em melhor desempenho). O serviço de otimização de pesquisa não usa os caminhos de acesso de pesquisa para o seguinte predicado porque a substring é menor que cinco 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. No entanto, os caminhos de acesso de pesquisa não são usados para IS porque a substring é menor que cinco 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 um literal de substring com cinco ou mais caracteres.

  • 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 de consultas com os seguintes padrões porque cada predicado especifica que uma substring de cinco 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 substrings com menos de cinco caracteres:

    RLIKE '.*tel=[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
    
    Copy
  • Padrões que usam o operador de alternância em que uma opção é uma substring com menos de cinco 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 literais de substring são menores que cinco caracteres, 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 de substring com cinco caracteres ou mais.

Por exemplo, considere o padrão:

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

Neste exemplo:

  • Embora os literais de substring (por exemplo, st=, CA etc.) tenham menos de cinco caracteres, o serviço de otimização de pesquisa reconhece que a substring st=CA, st=AZ ou st=NV (cada uma com cinco caracteres) deve aparecer no texto.

  • Da mesma forma, mesmo que a substring literal --> tenha menos de cinco caracteres, o serviço de otimização de pesquisa determina que a substring -->--> (que tem mais de cinco 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.