Megosztás:


Rövid útmutató: Lekérdezésoptimalizáló-asszisztens

A GitHub Copilot segít a fejlesztőknek optimalizálni a lekérdezéseket és elemezni a teljesítmény szűk keresztmetszeteit anélkül, hogy szakértelemre van szükségük az adatbázis belső elemeiben, különösen a mély Transact-SQL (T-SQL) szakértelemmel nem rendelkező fejlesztők számára. A GitHub Copilot képes lebontani az összetett SQL-t, értelmezni a végrehajtási terveket, és indexelési stratégiákat vagy újrabontási lehetőségeket javasolni. A fejlesztők továbbra is működőképesen és teljesíthetően használhatják az alkalmazásokat, miközben a funkciók kézbesítésére összpontosítanak.

Első lépések

Győződjön meg arról, hogy csatlakozik egy adatbázishoz, és meg van nyitva egy aktív szerkesztőablak az MSSQL kiterjesztéssel. Amikor csatlakozik, a @mssql csevegés résztvevői megértik az adatbázis-környezet kontextusát, és pontos, környezettudatos javaslatokat tehetnek. Ha nem csatlakozik adatbázishoz, a csevegés résztvevője nem rendelkezik a sémával vagy az adatkörnyezettel, hogy értelmes válaszokat adjon.

Az alábbi példák a AdventureWorksLT2022 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.

A legjobb eredmény érdekében módosítsa a táblázat- és sémaneveket a saját környezetének megfelelően.

Győződjön meg arról, hogy a csevegés tartalmazza az @mssql előtagot. Például írja be @mssql, majd adja meg a kérdést vagy felkérést. Ez az előtag biztosítja, hogy a csevegés résztvevője megértse, hogy SQL-hez kapcsolódó segítséget kér.

Teljesítmény optimalizálása a GitHub Copilottal

A GitHub Copilot számos módszert kínál arra, hogy a fejlesztők nagy teljesítményű, éles üzemre kész adatbáziskódot írjanak anélkül, hogy mélyreható szakértelemre van szükségük a lekérdezések finomhangolásában vagy a végrehajtási terv elemzésében. Akár új funkciókat hoz létre, akár teljesítményproblémát vizsgál, a GitHub Copilot elemzéseket biztosít, optimalizálást javasol, és segít a lekérdezések szerkezetének átalakításában. Ezeket a képességeket a Meglévő munkafolyamatban a Visual Studio Code-ban érheti el.

Az alábbi szakaszok a gyakori használati eseteket és példákat ismertetik arra, hogy mit kérdezhet meg a csevegés résztvevőin keresztül.

Lekérdezések optimalizálása

A GitHub Copilot használatával azonosíthatja az SQL- vagy objektum-relációs leképezési (ORM-) lekérdezések hatékonysági problémáit, és javaslatot tesz a teljesítmény javítására. A GitHub Copilot segít a T-SQL és az ORM ajánlott eljárásainak alkalmazásában, a lassú lekérdezések újraírásától az indexek ajánlásán át az olyan antiminták elkerüléséig, mint a Cartesian-illesztések, a jelenlegi környezet alapján.

Egyszerű példa

Optimize the following query:

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

Indexjavítási példa

Suggest indexing improvements for this query:

SELECT ProductID
FROM SalesLT.SalesOrderDetail
WHERE Quantity > 100;

Csatlakozz a fejlesztési példához

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

SELECT * FROM Customers, Order;

Beágyazott kiválasztási példa

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

Végrehajtási terv elemzése

A végrehajtási tervek részletes leírást nyújtanak arról, hogy az SQL-motor hogyan dolgozza fel a lekérdezéseket. A GitHub Copilot segíthet értelmezni a végrehajtási terveket, azonosítani a szűk keresztmetszeteket, például a beágyazott hurokcsatlakozásokat, és valós lekérdezési mintákon és indexelési stratégiákon alapuló fejlesztéseket javasolni.

Példaként az alábbi lekérdezést használhatja a végrehajtási terv létrehozásához az MSSQL-bővítmény Becsült/Tényleges terv lehetőségével:

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;

A lehető legtöbb kontextust foglalja bele a szerkesztő lekérdezésének kiválasztásával, és a sqlplan fájl belefoglalásával a GitHub Copilot csevegőablakában, ahogyan az a képernyőképen látható.

Képernyőkép egy végrehajtási tervről a Visual Studio Code-ban.

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.

Példaként az alábbi lekérdezést használhatja a végrehajtási terv létrehozásához az MSSQL-bővítmény Becsült/Tényleges terv lehetőségével:

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

A lehető legtöbb kontextust foglalja bele a szerkesztő lekérdezésének kiválasztásával, és a sqlplan fájl belefoglalásával a GitHub Copilot csevegőablakában, ahogyan az a képernyőképen látható.

Képernyőkép egy végrehajtási tervről beágyazott hurokcsatlakozással a Visual Studio Code-ban.

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;

Lekérdezések szerkezetátalakítása

A gyakori táblakifejezéseket (CTE-k) használó lekérdezések átszervezése megkönnyíti a lekérdezések olvasását és karbantartását. Ez a megközelítés különösen hasznos összetett logikához vagy beágyazott lekérdezésekhez. A GitHub Copilot segíthet átírni a meglévő lekérdezéseket a CTE-k használatára az eredeti szándék megőrzése és az egyértelműség javítása mellett.

Belső kijelölés a CTE-példához

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 záradék CTE példában

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;

Aggregációs záradék a CTE-példához

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;

Kód-először teljesítmény forgatókönyvek

Ha olyan ORM-ekkel dolgozik, mint az Entity Framework, a Prisma vagy a Sequelize, a teljesítmény csökkenhet, ha nem optimalizálja a lekérdezéseket. A GitHub Copilot segít észlelni és megoldani az olyan problémákat, mint a hiányzó indexek, a nem hatékony szűrés és az N+1 problémák a kódelső munkafolyamatokban.

Prisma-példa

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

Entity Framework Core példa

Using Entity Framework Core, how can you analyze and optimize a LINQ query that retrieves the top 10 customers by total order value?

Példa szekvenálás

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

Ossza meg tapasztalatait

Az MSSQL-bővítményHez tartozó GitHub Copilot pontosításához és fejlesztéséhez használja a következő GitHub-problémasablont a visszajelzés elküldéséhez: GitHub Copilot Feedback

Visszajelzés küldésekor fontolja meg a következőket:

  • Tesztelt forgatókönyvek: Tudassa velünk, hogy mely területekre összpontosított, például sémalétrehozásra, lekérdezésgenerálásra, biztonságra, honosításra.

  • Ami jól működött: Ismertesse azokat a tapasztalatokat, amelyek zökkenőmentesnek, hasznosnak mutattak, vagy amelyek meghaladták az Ön elvárásait.

  • Problémák vagy hibák: Tartalmazzon bármilyen problémát, következetlenséget vagy zavaró viselkedést. A képernyőképek és a képernyőfelvételek különösen hasznosak.

  • Fejlesztési javaslatok: Ötletek megosztása a használhatóság javítására, a lefedettség bővítésére vagy a GitHub Copilot válaszainak javítására.