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);
Para especificar EQUALITY para todas as colunas dos tipos de dados compatíveis (exceto para semiestruturado e GEOGRAPHY):
ALTER TABLE mytable ADD SEARCH OPTIMIZATION;
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:
Tipos de dados para números de ponto fixo incluindo o seguinte:
Todos os tipos de dados INTEGER, que têm uma escala de 0.
Não inteiros de ponto fixo, que têm uma escala diferente de 0 (como
NUMBER(10,2)
).Converte em números de ponto fixo (por exemplo,
NUMBER(30, 2)::NUMBER(30, 5)
).
Tipos de dados de cadeia de caracteres e binários (por exemplo, VARCHAR e BINARY).
Tipos de dados de data e hora (por exemplo, DATE, TIME e TIMESTAMP).
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');
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
$$
;
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);