Compartir a través de


Inicio rápido: Asistente del optimizador de consultas

GitHub Copilot ayuda a los desarrolladores a optimizar las consultas y analizar cuellos de botella de rendimiento sin necesidad de experiencia en los elementos internos de la base de datos, especialmente los desarrolladores sin conocimientos profundos de Transact-SQL (T-SQL). GitHub Copilot puede desglosar SQL complejo, interpretar planes de ejecución y sugerir estrategias de indexación o oportunidades de refactorización. Los desarrolladores pueden mantener sus aplicaciones funcionales y eficaces, a la vez que se centran en la entrega de características.

Comienza

Asegúrese de que está conectado a una base de datos y de que tiene abierta una ventana del editor activa con la extensión MSSQL. Esta conexión permite al participante del @mssql chat comprender el contexto del entorno de base de datos, lo que permite sugerencias precisas y compatibles con el contexto. Sin una conexión de base de datos, el participante del chat no tendrá el esquema ni el contexto de datos para proporcionar respuestas significativas.

En los ejemplos siguientes se usa la AdventureWorksLT2022 base de datos de ejemplo, que puede descargar desde la página principal Ejemplos de Microsoft SQL Server y Proyectos de comunidad .

Para obtener los mejores resultados, ajuste los nombres de tabla y esquema para que coincidan con su propio entorno.

Asegúrese de que el chat incluye el @mssql prefijo. Por ejemplo, escriba @mssql seguido de su pregunta o indicador. Esto garantiza que el participante del chat comprenda que solicita ayuda relacionada con SQL.

Optimización del rendimiento con GitHub Copilot

GitHub Copilot ofrece varias maneras de ayudar a los desarrolladores a escribir código de base de datos eficaz y listo para producción sin necesidad de experiencia profunda en el ajuste de consultas o el análisis del plan de ejecución. Tanto si va a crear nuevas características como si investiga un problema de rendimiento, GitHub Copilot puede exponer información detallada, recomendar optimizaciones y ayudar a reestructurar las consultas, todo ello dentro del flujo de trabajo existente en Visual Studio Code.

Estos son casos de uso comunes y ejemplos de lo que puede preguntar a través del participante del chat.

Optimización de consultas

Use GitHub Copilot para identificar ineficacias en consultas de asignación relacional de objetos (ORM) o SQL y sugerir formas de mejorar el rendimiento. GitHub Copilot le ayuda a aplicar procedimientos recomendados de T-SQL y ORM, desde la reescritura de consultas lentas para recomendar índices o evitar antipatrones como combinaciones cartesianas, en función del contexto actual.

Ejemplo básico

Optimize the following query:

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

Ejemplo de mejora de índices

Suggest indexing improvements for this query:

SELECT ProductID
FROM SalesLT.SalesOrderDetail
WHERE Quantity > 100;

Ejemplo de mejora de integración

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

SELECT * FROM Customers, Order;

Ejemplo de selección anidada

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álisis del plan de ejecución

Los planes de ejecución proporcionan un desglose detallado de cómo procesa el motor de SQL las consultas. GitHub Copilot puede ayudarle a interpretar los planes de ejecución, identificar cuellos de botella, como uniones por bucles anidados, y sugerir mejoras basadas en patrones de consulta reales y estrategias de indexación.

Puede usar la consulta siguiente como ejemplo para generar el plan de ejecución mediante la opción Plan estimado/real de la extensión 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;

Incluya tanto contexto como sea posible; para ello, seleccione la consulta en el editor e incluya el sqlplan archivo en la ventana de chat de GitHub Copilot, como se muestra en esta captura de pantalla.

Captura de pantalla que muestra un ejemplo de plan de ejecución en 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.

Puede usar la consulta siguiente como ejemplo para generar el plan de ejecución mediante la opción Plan estimado/real de la extensión 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);

Incluya tanto contexto como sea posible seleccionando la consulta en el editor e incluyendo el sqlplan archivo en la ventana de chat de GitHub Copilot, como se muestra en esta captura de pantalla.

Captura de pantalla que muestra un plan de ejecución con combinación de bucle anidado en 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;

Reestructuración de consultas

La reestructuración de consultas mediante expresiones de tabla comunes (CTE) puede mejorar la legibilidad y la mantenibilidad, especialmente en el caso de lógica compleja o subconsultas anidadas. GitHub Copilot puede ayudar a reescribir las consultas existentes para usar CTE a la vez que conserva la intención y mejora la claridad.

Ejemplo interno de selección 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;

Ejemplo de 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;

Ejemplo de la cláusula de agregación para 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;

Escenarios de rendimiento de code-first

Cuando se trabaja con ORM como Entity Framework, Prisma o Sequelize, el rendimiento puede degradarse si las consultas no están optimizadas. GitHub Copilot ayuda a detectar y resolver problemas como los índices que faltan, el filtrado ineficaz y los problemas de N+1 en los flujos de trabajo de código primero.

Ejemplo de Prisma

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

Ejemplo 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?

Ejemplo de Sequelize

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

Compartir la experiencia

Para ayudarnos a refinar y mejorar GitHub Copilot para la extensión MSSQL, use la siguiente plantilla de problema de GitHub para enviar sus comentarios: Comentarios de GitHub Copilot

Al enviar comentarios, considere la posibilidad de incluir:

  • Escenarios probados : háganos saber en qué áreas se ha centrado, por ejemplo, la creación de esquemas, la generación de consultas, la seguridad, la localización.

  • Lo que funcionó bien : describa cualquier experiencia que se sintiera suave, útil o superara sus expectativas.

  • Problemas o errores : incluya cualquier problema, incoherencias o comportamientos confusos. Las capturas de pantalla o las grabaciones de pantalla son especialmente útiles.

  • Sugerencias para mejorar : comparta ideas para mejorar la facilidad de uso, expandir la cobertura o mejorar las respuestas de GitHub Copilot.