Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
GitHub Copilot ułatwia deweloperom optymalizowanie zapytań i analizowanie wąskich gardeł wydajności bez konieczności znajomości wewnętrznych baz danych, zwłaszcza deweloperów bez głębokiej wiedzy Transact-SQL (T-SQL). GitHub Copilot może rozkładać złożone zapytania SQL, interpretować plany wykonania i sugerować strategie indeksacji lub potencjalne możliwości refaktoryzacji. Deweloperzy mogą utrzymać swoje aplikacje funkcjonalne i wydajne, jednocześnie skupiając się na dostarczaniu funkcji.
Wprowadzenie
Upewnij się, że masz połączenie z bazą danych i masz otwarte aktywne okno edytora z rozszerzeniem MSSQL. To połączenie umożliwia uczestnikowi czatu @mssql zrozumienie kontekstu środowiska bazy danych, umożliwiając dokładne i kontekstowe sugestie. Bez połączenia z bazą danych uczestnik czatu nie będzie miał schematu ani kontekstu danych w celu zapewnienia znaczących odpowiedzi.
W poniższych przykładach użyto przykładowej bazy danych AdventureWorksLT2022, którą można pobrać ze strony głównej Przykładów i projektów społeczności programu Microsoft SQL Server.
Aby uzyskać najlepsze wyniki, dostosuj nazwy tabel i schematów, aby dopasować je do własnego środowiska.
Upewnij się, że czat zawiera @mssql prefiks. Na przykład wpisz @mssql swoje pytanie lub polecenie. Dzięki temu uczestnik czatu rozumie, że prosi o pomoc związaną z językiem SQL.
Optymalizowanie wydajności za pomocą narzędzia GitHub Copilot
GitHub Copilot oferuje wiele sposobów, aby ułatwić deweloperom pisanie wydajnego, gotowego do produkcji kodu bazy danych bez konieczności dogłębnej wiedzy w zakresie dostrajania zapytań lub analizy planu wykonywania. Niezależnie od tego, czy tworzysz nowe funkcje, czy badasz problem z wydajnością, narzędzie GitHub Copilot może uwidocznić szczegółowe informacje, polecać optymalizacje i pomagać w restrukturyzacji zapytań, a wszystko to w ramach istniejącego przepływu pracy w programie Visual Studio Code.
Poniżej przedstawiono typowe przypadki użycia i przykłady tego, co można zadać za pośrednictwem uczestnika czatu.
Optymalizowanie zapytań
Użyj narzędzia GitHub Copilot, aby zidentyfikować nieefektywność zapytań SQL lub mapowania relacyjnego obiektów (ORM) i zasugerować sposoby poprawy wydajności. GitHub Copilot pomaga stosować najlepsze praktyki dotyczące języka T-SQL i ORM, od przepisania wolnych zapytań, poprzez sugerowanie indeksów, po unikanie antywzorców, takich jak sprzężenia kartezjańskie, na podstawie bieżącego kontekstu.
Przykład podstawowy
Optimize the following query:
SELECT *
FROM SalesLT.SalesOrderHeader
WHERE OrderDate > '2023-01-01';
Przykład poprawy indeksu
Suggest indexing improvements for this query:
SELECT ProductID
FROM SalesLT.SalesOrderDetail
WHERE Quantity > 100;
Przykład ulepszenia sprzężenia
Rewrite this query to avoid a Cartesian join. Make sure the new query follows T-SQL best practices:
SELECT * FROM Customers, Order;
Przykład wyboru zagnieżdżonego
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')
}
}
});
Analiza planu wykonania
Plany wykonywania zawierają szczegółowy podział sposobu przetwarzania zapytań przez aparat SQL. Narzędzie GitHub Copilot może pomóc w interpretowaniu planów wykonywania, identyfikowaniu wąskich gardeł, takich jak sprzężenia zagnieżdżonych pętli, oraz sugerowaniu ulepszeń na podstawie rzeczywistych wzorców zapytań i strategii indeksowania.
Możesz użyć następującego zapytania jako przykładu, aby wygenerować plan wykonania przy użyciu opcji Szacowany/Rzeczywisty plan w rozszerzeniu 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;
Dołącz jak najwięcej kontekstu, wybierając zapytanie z edytora i dołączając sqlplan plik w oknie czatu w usłudze GitHub Copilot, jak pokazano na tym zrzucie ekranu.
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.
Możesz użyć następującego zapytania jako przykładu, aby wygenerować plan wykonania przy użyciu opcji Szacowany/Rzeczywisty plan w rozszerzeniu 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);
Dołącz jak najwięcej kontekstu, wybierając zapytanie z edytora i dołączając sqlplan plik w oknie czatu w usłudze GitHub Copilot, jak pokazano na tym zrzucie ekranu.
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;
Restrukturyzacja zapytań
Restrukturyzacja zapytań przy użyciu typowych wyrażeń tabelarycznych (CTE) może zwiększyć czytelność i łatwość utrzymania, szczególnie w przypadku złożonej logiki lub zagnieżdżonych podzapytań. GitHub Copilot może pomóc w ponownym zapisaniu istniejących zapytań, aby używać CTEs, zachowując ich intencję i poprawiając przejrzystość.
Wewnętrzny wybór do przykładu 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;
Przykład klauzuli HAVING dla 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;
Przykład klauzuli agregacji w 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;
Scenariusze wydajności oparte na kodzie
Podczas pracy z maszynami ORM, takimi jak Entity Framework, Prisma lub Sequelize, wydajność może ulec pogorszeniu, jeśli zapytania nie są zoptymalizowane. GitHub Copilot pomaga wykrywać i rozwiązywać problemy, takie jak brakujące indeksy, nieefektywne filtrowanie i problemy N+1 w przepływach pracy z kodem.
Przykład prisma
In a Prisma project, how would you ensure that queries filtering by `OrderDate` in `SalesOrderHeader` are using indexes effectively?
Przykład programu 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?
Przykład Sequelize
In Sequelize, how do you restructure a query that fetches order history with product details to minimize N+1 query issues?
Podziel się swoimi doświadczeniami
Aby pomóc nam udoskonalić i ulepszyć narzędzie GitHub Copilot dla rozszerzenia MSSQL, użyj następującego szablonu problemu GitHub, aby przesłać swoją opinię: GitHub Copilot Feedback
Podczas przesyłania opinii należy wziąć pod uwagę następujące kwestie:
Przetestowane scenariusze — daj nam znać obszary, na przykład tworzenie schematu, generowanie zapytań, zabezpieczenia, lokalizację.
Co się udało — opisz wszelkie doświadczenia, które przebiegły sprawnie, były pomocne lub przerosły twoje oczekiwania.
Problemy lub błędy — obejmują wszelkie problemy, niespójności lub mylące zachowania. Zrzuty ekranu lub nagrania ekranu są szczególnie przydatne.
Sugestie dotyczące poprawy — podziel się pomysłami na poprawę użyteczności, rozszerzaniem zasięgu lub ulepszaniem odpowiedzi w usłudze GitHub Copilot.
Treści powiązane
- Rozszerzenie GitHub Copilot for MSSQL dla programu Visual Studio Code
- Szybki start: korzystanie z sugestii dotyczących czatu i wbudowanych sugestii narzędzia GitHub Copilot
- Szybki start: generowanie kodu
- Szybki start: korzystanie z eksploratora schematu i projektanta
- Szybki start: korzystanie z konstruktora zapytań inteligentnych
- Szybki start: używanie narzędzia objaśniającego logikę biznesową
- Szybki start: analizator zabezpieczeń
- Szybki start: pomocnik lokalizacji i formatowania
- Szybki start: generowanie danych na potrzeby testowania i pozorowania
- Ograniczenia i znane problemy