Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
GitHub Copilot помогает разработчикам оптимизировать запросы и анализировать узкие места производительности, не нуждаясь в экспертизе по внутреннему устройству баз данных, особенно тем разработчикам, у которых нет глубоких знаний в Transact-SQL (T-SQL). GitHub Copilot может разбирать сложные запросы SQL, интерпретировать планы выполнения и предлагать стратегии индексирования или возможности для рефакторинга. Разработчики могут поддерживать свои приложения функциональными и эффективными, одновременно сосредотачиваясь на доставке новых функций.
Начало работы
Убедитесь, что вы подключены к базе данных и открываете активное окно редактора с расширением MSSQL. Это подключение позволяет участнику чата @mssql понять контекст вашей среды базы данных, обеспечивая точные предложения с учетом контекста. Без подключения к базе данных участник чата не будет иметь контекст схемы или данных для предоставления значимых ответов.
В следующих примерах используется образец базы данных AdventureWorksLT2022, доступный для загрузки на домашней странице проектов сообщества и примеров Microsoft SQL Server.
Для получения наилучших результатов настройте имена таблиц и схем в соответствии с собственной средой.
Убедитесь, что чат включает @mssql префикс. Например, введите @mssql, а затем ваш вопрос или запрос. Это гарантирует, что участник чата понимает, что вы запрашиваете помощь, связанную с SQL.
Оптимизация производительности с помощью GitHub Copilot
GitHub Copilot предлагает несколько способов, которые помогут разработчикам создавать готовый к работе код базы данных, не требуя глубокого опыта в анализе планов выполнения запросов или настройки запросов. Независимо от того, создаете ли вы новые функции или изучаете проблему с производительностью, GitHub Copilot может применять аналитические сведения, рекомендации по оптимизации и помочь реструктурировать запросы, все в рамках существующего рабочего процесса в Visual Studio Code.
Ниже приведены распространенные варианты использования и примеры того, что можно спросить с помощью участника чата.
Оптимизация запросов
Используйте GitHub Copilot для выявления неэффективностей в запросах SQL или объектно-реляционных отображениях (ORM) и предложения способов повышения производительности. GitHub Copilot помогает применять рекомендации T-SQL и ORM, от перезаписи медленных запросов до рекомендации индексов или предотвращения анти-шаблонов, таких как декартовые соединения, на основе текущего контекста.
Базовый пример
Optimize the following query:
SELECT *
FROM SalesLT.SalesOrderHeader
WHERE OrderDate > '2023-01-01';
Пример улучшения индекса
Suggest indexing improvements for this query:
SELECT ProductID
FROM SalesLT.SalesOrderDetail
WHERE Quantity > 100;
Пример улучшений интеграции
Rewrite this query to avoid a Cartesian join. Make sure the new query follows T-SQL best practices:
SELECT * FROM Customers, Order;
Пример вложенного выбора
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')
}
}
});
Анализ плана выполнения
Планы выполнения предоставляют подробные сведения о том, как подсистема SQL обрабатывает запросы. GitHub Copilot помогает интерпретировать планы выполнения, выявлять узкие места, такие как соединения вложенных циклов, и предлагать улучшения на основе настоящих шаблонов запросов и стратегий индексирования.
Следующий запрос можно использовать в качестве примера для создания плана выполнения с помощью параметра Estimated/Actual plan в расширении 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;
Включите как можно больше контекста, выбрав запрос из редактора и включив sqlplan файл в окно чата GitHub Copilot, как показано на этом снимке экрана.
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.
Следующий запрос можно использовать в качестве примера для создания плана выполнения с помощью параметра Estimated/Actual plan в расширении 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);
Включите как можно больше контекста, выбрав запрос из редактора и включив sqlplan файл в окне чата GitHub Copilot, как показано на этом снимке экрана.
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;
Реструктуризация запросов
Реструктуризация запросов с использованием общих выражений таблиц (CTEs) может повысить удобочитаемость и удобство обслуживания, особенно для сложной логики или вложенных запросов. GitHub Copilot может помочь переписать существующие запросы для использования ТСВ, сохраняя намерение и повышая ясность.
Пример внутреннего выбора в 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;
Пример оператора HAVING для 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;
Пример положения агрегации для 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;
Сценарии производительности, начинающиеся с кода
При работе с ORMs, такими как Entity Framework, Prisma или Sequelize, производительность может снизиться, если запросы не оптимизированы. GitHub Copilot помогает обнаруживать и устранять проблемы, такие как отсутствующие индексы, неэффективная фильтрация и проблема N+1 в кодо-ориентированных рабочих процессах.
Пример Prisma
In a Prisma project, how would you ensure that queries filtering by `OrderDate` in `SalesOrderHeader` are using indexes effectively?
Пример 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?
Пример Sequelize
In Sequelize, how do you restructure a query that fetches order history with product details to minimize N+1 query issues?
Оставьте свой отзыв
Чтобы помочь нам уточнить и улучшить GitHub Copilot для расширения MSSQL, используйте следующий шаблон проблемы GitHub для отправки отзывов: GitHub Copilot Feedback
При отправке отзывов рассмотрите возможность включения:
Сценарии, проверенные . Сообщите нам, какие области вы сосредоточены, например создание схемы, создание запросов, безопасность, локализация.
То, что работало хорошо – Опишите любые ситуации, которые казались бесперебойными, полезными или превысили ваши ожидания.
Проблемы или ошибки — включает любые проблемы, несоответствия или запутанное поведение. Снимки экрана или записи экрана особенно полезны.
Предложения по улучшению — предоставление общих идей для улучшения удобства использования, расширения охвата или повышения ответов GitHub Copilot.
Связанный контент
- Расширение GitHub Copilot для MSSQL для Visual Studio Code
- Быстрый старт: Использование чата и встроенных предложений GitHub Copilot
- Быстрый старт: Создание кода
- Краткое руководство. Использование обозревателя схем и конструктора
- Быстрый старт: Использование построителя интеллектуальных запросов
- Краткое руководство: Использование инструмента объяснения бизнес-логики
- Краткое руководство: Анализатор безопасности
- Краткое руководство: Инструмент поддержки локализации и форматирования
- Быстрое начало: Создание данных для тестирования и имитации
- Известные проблемы и ограничения