GitHub Copilot는 개발자, 특히 심층적인 T-SQL 전문 지식이 없는 개발자에게 데이터베이스 내부 없이 쿼리를 최적화하고 성능 병목 상태를 분석하는 데 master
도움이 됩니다. 복잡한 SQL을 분석하고, 실행 계획을 해석하고, 인덱싱 전략 또는 리팩터링 기회를 제안하여 개발자가 기능 제공에 집중하면서 앱의 기능과 성능을 유지할 수 있습니다.
시작하기
데이터베이스에 연결되어 있고 MSSQL 확장으로 활성 편집기 창이 열려 있는지 확인합니다. 이 연결을 사용하면 채팅 참가자가 @mssql
데이터베이스 환경의 컨텍스트를 이해할 수 있으므로 정확하고 컨텍스트 인식 제안을 사용할 수 있습니다. 데이터베이스 연결이 없으면 채팅 참가자는 의미 있는 응답을 제공하는 스키마 또는 데이터 컨텍스트가 없습니다.
다음 예제에서는 AdventureWorksLT2022
홈페이지에서 다운로드할 수 있는 샘플 데이터베이스를 사용합니다.
최상의 결과를 위해 사용자 고유의 환경에 맞게 테이블 및 스키마 이름을 조정합니다.
@mssql
접두사가 채팅에 포함되어 있는지 확인하세요. 예를 들어, @mssql
을 입력한 후에 질문이나 프롬프트를 작성합니다. 이렇게 하면 채팅 참가자가 SQL 관련 지원을 요청하는 것을 이해할 수 있습니다.
GitHub Copilot를 사용하여 성능 최적화
GitHub Copilot는 개발자가 쿼리 튜닝 또는 실행 계획 분석에 대한 심층적인 전문 지식 없이도 성능이 좋은 프로덕션 준비 데이터베이스 코드를 작성할 수 있는 여러 가지 방법을 제공합니다. 새 기능을 빌드하든 성능 문제를 조사하든 GitHub Copilot는 Visual Studio Code의 기존 워크플로 내에서 인사이트를 표시하고 최적화를 권장하며 쿼리를 재구성하는 데 도움을 줄 수 있습니다.
다음은 채팅 참가자를 통해 요청할 수 있는 일반적인 사용 사례 및 예제입니다.
쿼리 최적화
GitHub Copilot를 사용하여 SQL 또는 ORM 쿼리의 비효율성을 식별하고 성능을 향상시키는 방법을 제안합니다. 느린 쿼리를 다시 작성하는 것부터 인덱스를 추천하거나 Cartesian 조인과 같은 안티 패턴을 방지하는 것까지 GitHub Copilot는 현재 컨텍스트에 따라 T-SQL 및 ORM 모범 사례를 적용하는 데 도움이 됩니다.
- 다음 쿼리를 최적화합니다.
SELECT *
FROM SalesLT.SalesOrderHeader
WHERE OrderDate > '2023-01-01';
- 이 쿼리에 대한 인덱싱 개선 사항을 제안합니다.
SELECT ProductID
FROM SalesLT.SalesOrderDetail
WHERE Quantity > 100;
- 카티시안 조인을 방지하려면 이 쿼리를 다시 작성합니다. 새 쿼리가 T-SQL 모범 사례를 따르는지 확인합니다.
SELECT * FROM Customers, Order;
- 불필요한 중첩된 선택을 방지하고 가독성을 향상시키기 위해 이
Prisma
쿼리를 다시 작성합니다.
const orders = await prisma.salesOrderHeader.findMany({
where: {
orderDate: {
gt: new Date('2023-01-01')
}
}
});
실행 계획 분석
실행 계획은 SQL 엔진이 쿼리를 처리하는 방법에 대한 자세한 분석을 제공합니다. GitHub Copilot를 사용하면 실행 계획을 해석하고, 중첩된 루프 조인과 같은 병목 상태를 식별하고, 실제 쿼리 패턴 및 인덱싱 전략에 따라 향상된 기능을 제안할 수 있습니다.
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;
- 내 데이터베이스 전문가가 공유하는 실행 계획에 따르면 다음 쿼리는 내 앱의 성능에 영향을 주는 중첩된 루프 조인을 사용합니다. 왜 이런 일이 일어날 수 있는지 간단히 설명할 수 있습니까? 또한 쿼리의 성능을 향상시킬 수 있는 최적화 전략을 제안합니다.
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);
- 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;
쿼리 재구성
CTE(Common Table Expressions)를 사용하여 쿼리를 재구성하면 특히 복잡한 논리 또는 중첩된 하위 쿼리의 가독성 및 유지 관리 효율성이 향상될 수 있습니다. GitHub Copilot는 의도를 유지하고 명확성을 향상하는 동시에 CTE를 사용하도록 기존 쿼리를 다시 작성하는 데 도움이 될 수 있습니다.
- 일반 테이블 식(
CTEs
)을 사용하여 이 쿼리를 다시 작성하여 명확성을 향상시킵니다.
SELECT *
FROM (SELECT ProductID,
SUM(Quantity) AS TotalQuantity
FROM Sales
GROUP BY ProductID) AS SubQuery;
- 가독성 및 유지 관리를 개선하기 위해 CTE(공통 테이블 식)를 사용하여 다음 쿼리를 다시 작성합니다.
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를 사용하여 이 쿼리의 필터 조건과 집계 논리를 구분합니다.
SELECT ProductID,
AVG(UnitPrice) AS AvgPrice
FROM SalesLT.SalesOrderDetail
GROUP BY ProductID
HAVING AVG(UnitPrice) > 50;
Code-First 성능 시나리오
Entity Framework, Prisma 또는 Sequelize와 같은 ORM으로 작업할 때 쿼리가 최적화되지 않으면 성능이 저하될 수 있습니다. GitHub Copilot는 코드 우선 워크플로에서 누락된 인덱스, 비효율적인 필터링 및 N+1 문제와 같은 문제를 감지하고 해결하는 데 도움이 됩니다.
- Prisma 프로젝트에서 인덱스를 필터링하여
OrderDate
SalesOrderHeader
쿼리가 효과적으로 사용되도록 하려면 어떻게 해야 할까요? - Entity Framework Core를 사용하여 총 주문 값으로 상위 10명의 고객을 검색하는 LINQ 쿼리를 분석하고 최적화하려면 어떻게 해야 할까요?
- Sequelize에서 N+1 쿼리 문제를 최소화하기 위해 제품 세부 정보로 주문 기록을 가져오는 쿼리를 어떻게 재구성합니까?
피드백: 쿼리 최적화 프로그램 도우미
MSSQL 확장에 대한 GitHub Copilot를 구체화하고 개선하는 데 도움이 되도록 다음 GitHub 문제 템플릿을 사용하여 피드백을 제출합니다. GitHub Copilot 피드백
피드백을 제출할 때 다음을 포함하는 것이 좋습니다.
- 테스트된 시나리오 – 스키마 만들기, 쿼리 생성, 보안, 지역화와 같이 집중한 영역을 알려주세요.
- 잘 작동하는 기능 – 원활하거나 도움이 되거나 예상을 초과한 모든 경험을 설명합니다.
- 문제 또는 버그 – 문제, 불일치 또는 혼란스러운 동작을 포함합니다. 스크린샷 또는 화면 녹화가 특히 유용합니다.
- 개선 제안 - 유용성 향상, 적용 범위 확장 또는 GitHub Copilot의 응답 향상을 위한 아이디어를 공유합니다.
관련 콘텐츠
- Visual Studio Code용 MSSQL 확장용 GitHub Copilot
- 빠른 시작: 채팅 및 인라인 GitHub Copilot 제안 사용(미리 보기)
- 빠른 시작: 코드 생성(미리 보기)
- 빠른 시작: 스키마 탐색기 및 디자이너 사용(미리 보기)
- 빠른 시작: 스마트 쿼리 작성기 사용(미리 보기)
- 빠른 시작: 비즈니스 논리 설명자 사용(미리 보기)
- 빠른 시작: Security Analyzer(미리 보기)
- 빠른 시작: 지역화 및 서식 도우미(미리 보기)
- 빠른 시작: 테스트 및 모의를 위한 데이터 생성(미리 보기)
- 제한 사항 및 알려진 문제