Compartilhar via


Início rápido: Assistente de otimizador de consultas

O GitHub Copilot ajuda os desenvolvedores a otimizar consultas e analisar gargalos de desempenho sem precisar de experiência em internos do banco de dados, especialmente desenvolvedores sem experiência profunda em Transact-SQL (T-SQL). O GitHub Copilot pode dividir SQL complexo, interpretar planos de execução e sugerir estratégias de indexação ou oportunidades de refatoração. Os desenvolvedores podem manter seus aplicativos funcionais e com desempenho, mantendo-se focados na entrega de recursos.

Introdução

Verifique se você está conectado a um banco de dados e abra uma janela do editor ativo com a extensão MSSQL. Essa conexão permite que o participante do @mssql chat entenda o contexto do ambiente do banco de dados, permitindo sugestões precisas e com reconhecimento de contexto. Sem uma conexão de banco de dados, o participante do chat não terá o esquema ou o contexto de dados para fornecer respostas significativas.

Os exemplos a seguir usam o banco de dados de exemplo AdventureWorksLT2022, que você pode baixar na página inicial dos Exemplos e Projetos da Comunidade do Microsoft SQL Server.

Para obter melhores resultados, ajuste os nomes de tabela e esquema para corresponder ao seu próprio ambiente.

Verifique se o chat inclui o @mssql prefixo. Por exemplo, digite @mssql seguido de sua pergunta ou instrução. Isso garante que o participante do chat entenda que você está solicitando assistência relacionada ao SQL.

Otimizar o desempenho com o GitHub Copilot

O GitHub Copilot oferece várias maneiras de ajudar os desenvolvedores a escrever código de banco de dados com desempenho pronto para produção sem exigir conhecimento profundo em ajuste de consulta ou análise de plano de execução. Se você estiver criando novos recursos ou investigando um problema de desempenho, o GitHub Copilot poderá fornecer insights, recomendar otimizações e ajudar a reestruturar consultas, tudo dentro do fluxo de trabalho existente no Visual Studio Code.

Aqui estão casos de uso comuns e exemplos do que você pode perguntar por meio do participante do chat.

Otimizar consultas

Use o GitHub Copilot para identificar ineficiências em consultas SQL ou orM (mapeamento relacional de objeto) e sugerir maneiras de melhorar o desempenho. O GitHub Copilot ajuda você a aplicar práticas recomendadas de T-SQL e ORM, desde reescrever consultas lentas até recomendar índices ou evitar antipadrões como junções cartesianas, com base no contexto atual.

Exemplo básico

Optimize the following query:

SELECT *
FROM SalesLT.SalesOrderHeader
WHERE OrderDate > '2023-01-01';

Exemplo de melhoria de índice

Suggest indexing improvements for this query:

SELECT ProductID
FROM SalesLT.SalesOrderDetail
WHERE Quantity > 100;

Exemplo de melhoria de junção

Rewrite this query to avoid a Cartesian join. Make sure the new query follows T-SQL best practices:

SELECT * FROM Customers, Order;

Exemplo de seleção aninhada

Rewrite this Prisma query to avoid unnecessary nested selects and improve readability:

const orders = await prisma.salesOrderHeader.findMany({
  where: {
    orderDate: {
      gt: new Date('2023-01-01')
    }
  }
});

Análise do plano de execução

Os planos de execução fornecem um detalhamento de como o mecanismo SQL processa consultas. O GitHub Copilot pode ajudá-lo a interpretar planos de execução, identificar gargalos como junções de loops aninhados e sugerir melhorias com base em padrões de consulta do mundo real e estratégias de indexação.

Você pode usar a consulta a seguir como um exemplo para gerar o plano de execução usando a opção Plano Estimado/Real na extensão MSSQL:

SELECT soh1.SalesOrderID AS OrderA,
       soh2.SalesOrderID AS OrderB,
       soh1.TotalDue AS TotalA,
       soh2.TotalDue AS TotalB
FROM SalesLT.SalesOrderHeader AS soh1
    CROSS JOIN SalesLT.SalesOrderHeader AS soh2
WHERE soh1.TotalDue < soh2.TotalDue
ORDER BY soh2.TotalDue DESC;

Inclua o máximo de contexto possível, selecionando a consulta do editor e incluindo o sqlplan arquivo na janela de chat do GitHub Copilot, conforme mostrado nesta captura de tela.

Captura de tela mostrando um exemplo de plano de execução no Visual Studio Code.

According to the execution plan shared by my database expert, the following query is using a nested loop join which is affecting the performance of my app. Can you explain in simple terms why this might be happening? Additionally, suggest optimization strategies that could improve the query's performance.

Você pode usar a consulta a seguir como um exemplo para gerar o plano de execução usando a opção Plano Estimado/Real na extensão MSSQL:

SELECT c1.CustomerID,
       c1.LastName,
       c2.CustomerID AS MatchingCustomerID,
       c2.LastName AS MatchingLastName
FROM SalesLT.Customer AS c1
     INNER JOIN SalesLT.Customer AS c2
         ON c1.LastName = c2.LastName
        AND c1.CustomerID <> c2.CustomerID
OPTION (LOOP JOIN);

Inclua o máximo de contexto possível selecionando a consulta do editor e incluindo o sqlplan arquivo na janela de chat do GitHub Copilot, conforme mostrado nesta captura de tela.

Captura de tela mostrando um plano de execução com junção de loop aninhado no Visual Studio Code.

Explain the execution plan for this query that performs a join with a filter on TotalDue:

SELECT c.CustomerID,
       c.FirstName,
       c.LastName,
       soh.SalesOrderID,
       soh.TotalDue
FROM SalesLT.Customer AS c
     INNER JOIN SalesLT.SalesOrderHeader AS soh
         ON c.CustomerID = soh.CustomerID
WHERE soh.TotalDue > 500;

Reestruturação de consulta

Reestruturar consultas usando expressões de tabela comuns (CTEs) pode melhorar a legibilidade e manutenibilidade, especialmente para lógica complexa ou subconsultas aninhadas. O GitHub Copilot pode ajudar a reescrever suas consultas existentes para usar CTEs, preservando a intenção e melhorando a clareza.

Exemplo de seleção interna para CTE

Rewrite this query using common table expressions (CTEs) to improve clarity:

SELECT *
FROM (SELECT ProductID,
             SUM(Quantity) AS TotalQuantity
      FROM Sales
      GROUP BY ProductID) AS SubQuery;

Exemplo da cláusula HAVING para CTE

Rewrite the following query using a CTE (common table expression) to improve readability and maintainability:

SELECT soh.CustomerID,
       COUNT(*) AS OrderCount
FROM SalesLT.SalesOrderHeader AS soh
WHERE soh.OrderDate > '2022-01-01'
GROUP BY soh.CustomerID
HAVING COUNT(*) > 5;

Exemplo de cláusula de agregação em CTE

Use a CTE to separate the aggregation logic from the filter condition in this query:

SELECT ProductID,
       AVG(UnitPrice) AS AvgPrice
FROM SalesLT.SalesOrderDetail
GROUP BY ProductID
HAVING AVG(UnitPrice) > 50;

Cenários de desempenho orientados pelo código

Quando você trabalha com ORMs como Entity Framework, Prisma ou Sequelize, o desempenho pode diminuir se as consultas não forem otimizadas. O GitHub Copilot ajuda a detectar e resolver problemas como índices ausentes, filtragem ineficiente e problemas de N+1 em fluxos de trabalho de primeiro código.

Exemplo de Prisma

In a Prisma project, how would you ensure that queries filtering by `OrderDate` in `SalesOrderHeader` are using indexes effectively?

Exemplo do Entity Framework Core

Using Entity Framework Core, how can you analyze and optimize a LINQ query that retrieves the top 10 customers by total order value?

Exemplo do Sequelize

In Sequelize, how do you restructure a query that fetches order history with product details to minimize N+1 query issues?

Compartilhar sua experiência

Para nos ajudar a refinar e melhorar o GitHub Copilot para a extensão MSSQL, use o seguinte modelo de problema do GitHub para enviar seus comentários: Comentários do GitHub Copilot

Ao enviar comentários, considere incluir:

  • Cenários testados – informe-nos em quais áreas você se concentrou, por exemplo, na criação do esquema, na geração de consultas, na segurança, na localização.

  • O que funcionou bem – descreva todas as experiências que se sentiram suaves, úteis ou excederam suas expectativas.

  • Problemas ou bugs – inclua problemas, inconsistências ou comportamentos confusos. Capturas de tela ou gravações de tela são especialmente úteis.

  • Sugestões de melhoria – compartilhe ideias para melhorar a usabilidade, expandir a cobertura ou aprimorar as respostas do GitHub Copilot.