Acelerar as consultas com funções escalares usando a otimização de pesquisa

Uma função escalar retorna um único valor para cada invocação. O serviço de otimização de pesquisa pode melhorar o desempenho de consultas que usam funções escalares em predicados de igualdade. A função escalar pode ser uma função escalar definida pelo sistema ou uma função SQL escalar definida pelo usuário.

As seções a seguir fornecem mais informações sobre o suporte de otimização de pesquisa para consultas que usam funções escalares:

Como permitir a otimização de pesquisa para consultas que usam funções escalares

As consultas não são aprimoradas a menos que você ative a otimização de pesquisa para as colunas especificadas em predicados de igualdade que usam chamadas de função escalar. Para melhorar o desempenho das consultas com funções escalares em uma tabela, use o comando ALTER TABLE … ADD SEARCH OPTIMIZATION para fazer o seguinte:

  • Ativar a otimização de pesquisa para colunas específicas.

  • Ativar a otimização de pesquisa para todas as colunas de tabela.

Em geral, habilitar a otimização de pesquisa apenas para colunas específicas é a prática recomendada. Use a cláusula ON EQUALITY para especificar as colunas. Esse exemplo permite a otimização de pesquisa para uma coluna específica:

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

Para especificar EQUALITY para todas as colunas dos tipos de dados compatíveis (exceto para semiestruturado e GEOGRAPHY):

ALTER TABLE mytable ADD SEARCH OPTIMIZATION;
Copy

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

Tipos de dados suportados

O serviço de otimização de pesquisa pode melhorar o desempenho de consultas que usam colunas dos seguintes tipos de dados em predicados de igualdade que usam chamadas de função escalar:

As consultas que envolvem outros tipos de valores (por exemplo, VARIANT, FLOAT, GEOGRAPHY ou GEOMETRY) não se beneficiam.

Exemplos de consultas compatíveis com funções escalares

As consultas a seguir usam funções escalares e são compatíveis com o serviço de otimização de pesquisa.

Usar uma função escalar definida pelo sistema no predicado de uma consulta

Essa consulta usa a função escalar definida pelo sistema SHA2 em um predicado de igualdade. Para melhorar o desempenho, verifique se o método de pesquisa EQUALITY está ativado para a coluna mycol na tabela test_so_scalar_function_system.

SELECT *
  FROM test_so_scalar_function_system
  WHERE mycol = SHA2('Snowflake');
Copy

Use uma função escalar definida pelo usuário SQL no predicado de uma consulta

Crie uma função escalar definida pelo usuário:

CREATE OR REPLACE FUNCTION test_scalar_udf(x INTEGER)
RETURNS INTEGER
AS
$$
  SELECT x + POW(2, 3)::INTEGER + 2
$$
;
Copy

Essa consulta usa a função test_scalar_udf em um predicado de igualdade. Para melhorar o desempenho, verifique se o método de pesquisa EQUALITY está ativado para a coluna mycol na tabela test_so_scalar_function_udf.

SELECT *
  FROM test_so_scalar_function_udf
  WHERE mycol = test_scalar_udf(15750);
Copy