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

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);
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 subconsultas escalares em colunas dos seguintes tipos de dados:

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');
Copy

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);
Copy