Partilhar via


Quickstart: Assistente otimizador de consultas

O GitHub Copilot ajuda os programadores a otimizar consultas e analisar gargalos de desempenho sem precisar de conhecimentos internos de bases de dados, especialmente programadores sem profunda experiência em Transact-SQL (T-SQL). O GitHub Copilot pode decompor SQL complexo, interpretar planos de execução e sugerir estratégias de indexação ou oportunidades de refatoração. Os programadores podem manter as suas aplicações funcionais e com desempenho, mantendo-se focados na entrega de funcionalidades.

Introdução

Certifica-te de que estás ligado a uma base de dados e que tens uma janela de editor ativa aberta com a extensão MSSQL. Quando se liga, o participante @mssql do chat compreende o contexto do seu ambiente de base de dados e pode dar sugestões precisas e conscientes do contexto. Se não se ligar a uma base de dados, o participante do chat não tem o esquema ou contexto de dados para fornecer respostas significativas.

Os exemplos a seguir usam o AdventureWorksLT2022 banco de dados de exemplo, que você pode baixar da home page de Exemplos e Projetos da Comunidade do Microsoft SQL Server .

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

Certifique-se de que o chat inclui o prefixo @mssql . Por exemplo, digite @mssql seguido de a sua pergunta ou solicitação. Este prefixo garante que o participante do chat percebe que está a pedir assistência relacionada com SQL.

Otimize 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 de alto desempenho e pronto para produção sem exigir profunda experiência em ajuste de consultas ou análise de plano de execução. Quer esteja a desenvolver novas funcionalidades ou a investigar um problema de desempenho, o GitHub Copilot pode fornecer informações, recomendar otimizações e ajudar a reestruturar consultas. Pode aceder a todas estas capacidades dentro do seu fluxo de trabalho existente no Visual Studio Code.

As secções seguintes descrevem casos de uso comuns e exemplos do que pode perguntar através do participante do chat.

Otimizar consultas

Use o GitHub Copilot para identificar ineficiências em SQL ou em consultas de mapeamento objeto-relacional (ORM) e sugerir formas de melhorar o desempenho. O GitHub Copilot ajuda-te a aplicar as melhores práticas de T-SQL e ORM, desde reescrever consultas lentas até recomendar índices ou evitar anti-padrões como joins cartesianas, com base no teu 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 detalhado de como o mecanismo SQL processa consultas. O Copilot do GitHub pode ajudá-lo a interpretar planos de execução, identificar gargalos, como junções de loop aninhadas, e sugerir melhorias com base em padrões de consulta do mundo real e estratégias de indexação.

Você pode usar a seguinte consulta como um exemplo para gerar o plano de execução usando a opção de 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 no editor e incluindo o ficheiro sqlplan na janela de chat do GitHub Copilot, como mostrado nesta captura de ecrã.

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 seguinte consulta como um exemplo para gerar o plano de execução usando a opção de 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 no editor e incluindo o sqlplan ficheiro na janela de chat do GitHub Copilot, como mostrado nesta captura de ecrã.

Captura de ecrã mostrando um plano de execução com junção de ciclo 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 consultas

Reestruturar consultas usando expressões de tabela comuns (CTEs) pode tornar as suas consultas mais fáceis de ler e manter. Esta abordagem é especialmente útil para lógica complexa ou subconsultas aninhadas. O GitHub Copilot pode ajudá-lo a reescrever as suas consultas existentes para usar CTEs, preservando a intenção original 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 com foco no código

Quando trabalha com ORMs como Entity Framework, Prisma ou Sequelize, o desempenho pode degradar-se se não otimizar as suas consultas. O GitHub Copilot ajuda-o a detetar e resolver problemas como índices em falta, filtragem ineficiente e problemas N+1 em fluxos de trabalho baseados no 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 de 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 de sequelização

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

Partilhar a sua experiência

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

Ao enviar comentários, considere incluir:

  • Cenários testados: Diga-nos em que áreas se focou, por exemplo, criação de esquemas, geração de consultas, segurança, localização.

  • O que funcionou bem: Descreva quaisquer experiências que tenham sido tranquilas, úteis ou que tenham superado as suas expectativas.

  • Problemas ou erros: Inclua quaisquer problemas, inconsistências ou comportamentos inesperados. Capturas de ecrã ou gravações de ecrã são especialmente úteis.

  • Sugestões para melhoria: Partilhe ideias para melhorar a usabilidade, expandir a cobertura ou melhorar as respostas do GitHub Copilot.