Compartir a través de


Inicio rápido: Asistente para optimizador de consultas (versión preliminar)

GitHub Copilot ayuda a los desarrolladores, especialmente a aquellos que no tienen conocimientos profundos de T-SQL, a optimizar consultas y analizar cuellos de botella de rendimiento sin necesidad de entender los entresijos internos de las bases de datos. Puede desglosar SQL complejo, interpretar planes de ejecución y sugerir estrategias de indexación o oportunidades de refactorización, lo que permite a los desarrolladores mantener sus aplicaciones funcionales y eficaces al tiempo que permanecen centrados 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 SQL o ORM y sugerir formas de mejorar el rendimiento. Desde la reescritura de consultas lentas para recomendar índices o evitar antipatrones como combinaciones cartesianas, GitHub Copilot le ayuda a aplicar procedimientos recomendados de T-SQL y ORM en función del contexto actual.

  • Optimice la consulta siguiente:
SELECT *
FROM SalesLT.SalesOrderHeader
WHERE OrderDate > '2023-01-01';
  • Sugerir mejoras de indexación para esta consulta:
SELECT ProductID
FROM SalesLT.SalesOrderDetail
WHERE Quantity > 100;
  • Vuelva a escribir esta consulta para evitar una combinación cartesiana. Asegúrese de que la nueva consulta sigue los procedimientos recomendados de T-SQL:
SELECT * FROM Customers, Order;
  • Vuelva a escribir esta Prisma consulta para evitar selecciones anidadas innecesarias y mejorar la legibilidad:
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;

Sugerencia

Asegúrese de incluir 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:

Captura de pantalla que muestra un ejemplo de plan de ejecución en Visual Studio Code.

  • Según el plan de ejecución compartido por mi experto en base de datos, la siguiente consulta usa una combinación de bucle anidada que afecta al rendimiento de mi aplicación. ¿Puede explicarlo en términos simples por qué podría suceder esto? Además, sugiere estrategias de optimización que podrían mejorar el rendimiento de la consulta.

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

Sugerencia

Asegúrese de incluir 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:

Captura de pantalla que muestra un plan de ejecución con combinación de bucle anidado en Visual Studio Code.

  • Explicar el plan de ejecución de esta consulta que realiza una combinación con un filtro en 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 el mantenimiento, especialmente para las subconsultas complejas o lógicas 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.

  • Vuelva a escribir esta consulta mediante expresiones de tabla comunes (CTEs) para mejorar la claridad:
SELECT *
FROM (SELECT ProductID,
             SUM(Quantity) AS TotalQuantity
      FROM Sales
      GROUP BY ProductID) AS SubQuery;
  • Vuelva a escribir la siguiente consulta mediante un CTE (expresión de tabla común) para mejorar la legibilidad y el mantenimiento:
SELECT soh.CustomerID,
       COUNT(*) AS OrderCount
FROM SalesLT.SalesOrderHeader AS soh
WHERE soh.OrderDate > '2022-01-01'
GROUP BY soh.CustomerID
HAVING COUNT(*) > 5;
  • Use un CTE para separar la lógica de agregación de la condición de filtro en esta consulta:
SELECT ProductID,
       AVG(UnitPrice) AS AvgPrice
FROM SalesLT.SalesOrderDetail
GROUP BY ProductID
HAVING AVG(UnitPrice) > 50;

Escenarios de rendimiento de Code-First

Al trabajar 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.

  • En un proyecto Prisma, ¿cómo se aseguraría de que las consultas filtradas por OrderDate en SalesOrderHeader usan índices de forma eficaz?
  • Con Entity Framework Core, ¿cómo puede analizar y optimizar una consulta LINQ que recupera los 10 clientes principales por valor total de pedido?
  • En Sequelize, ¿cómo reestructura una consulta que captura el historial de pedidos con detalles del producto para minimizar los problemas de consulta de N+1?

Comentarios: Asistente del Optimizador de Consultas

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 centraba, 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. Capturas de pantalla o 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.