Acelere as consultas com subconsultas escalares usando otimização de pesquisa¶
Uma subconsulta escalar retorna um único valor (uma coluna de uma linha). Se nenhuma linha se qualificar para ser retornada, a subconsulta retorna NULL. O serviço de otimização de pesquisa pode melhorar o desempenho de consultas com subconsultas escalares. Para obter mais informações sobre subconsultas, consulte Como trabalhar com subconsultas.
As seções a seguir fornecem mais informações sobre o suporte de otimização de pesquisa para consultas com subconsultas:
Como ativar a otimização de pesquisa para consultas com subconsultas escalares
Exemplos de consultas compatíveis com subconsultas escalares
Como ativar a otimização de pesquisa para consultas com subconsultas escalares¶
As consultas com subconsultas não são aprimoradas, a menos que você ative a otimização de pesquisa para a coluna que é igual ao resultado da subconsulta. Para melhorar o desempenho de consultas com subconsultas escalares em uma tabela, use o comando ALTER TABLE … ADD SEARCH OPTIMIZATION para executar uma das seguintes ações:
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 subconsultas escalares em colunas dos seguintes tipos de dados:
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 subconsultas que envolvem outros tipos de valores (por exemplo, VARIANT, FLOAT, GEOGRAPHY ou GEOMETRY) não se beneficiam.
Exemplos de consultas compatíveis com subconsultas escalares¶
As consultas a seguir são exemplos de consultas com subconsultas escalares que são compatíveis com o serviço de otimização de pesquisa.
Essa consulta tem uma subconsulta escalar que consulta a mesma tabela que a tabela na consulta externa. Para melhorar o desempenho, certifique-se de que a otimização de pesquisa esteja ativada para a coluna salary
na tabela employees
.
SELECT employee_id
FROM employees
WHERE salary = (
SELECT MAX(salary)
FROM employees
WHERE department = 'Engineering');
Essa consulta tem uma subconsulta escalar que consulta uma tabela diferente da tabela na consulta externa. Para melhorar o desempenho, certifique-se de que a otimização de pesquisa esteja ativada para a coluna product_id
na tabela products
.
SELECT *
FROM products
WHERE products.product_id = (
SELECT product_id
FROM sales
GROUP BY product_id
ORDER BY COUNT(product_id) DESC
LIMIT 1);