2009-09-10 6 views
5

인덱스 최적화에서 연습 (읽기 : 인터뷰 질문)을 위해 SQL2005의 표준 AdventureWorks 데이터베이스에서 느린 쿼리가 필요합니다. 필자가 시도한 모든 쿼리는 약 1 초가 걸렸으며 효과적으로 최적화 할 수 있도록 여러 초 걸리는 쿼리를 선호합니다.AdventureWorks (SQL 2005)에서 느린 쿼리가 필요합니다.

여기 누군가가 그런 쿼리를 만들거나 느린 쿼리를 만드는 방법을 알려줄 수 있습니까? 난 그냥 내 쿼리가 아닌 확대됨에 만들 수없는 것 : 여기

+2

조기 탈 최적화는 ... –

답변

9

당신이 가장 행 데이터베이스 테이블의 목록이 있습니다

Tables - Rows count 
Sales.SalesOrderDetail - 121317 
Production.TransactionHistory - 113443 
Production.TransactionHistoryArchive - 89253 
Production.WorkOrder - 72591 
Production.WorkOrderRouting - 67131 
Sales.SalesOrderHeader - 31465 
Sales.SalesOrderHeaderSalesReason - 27647 
Person.Contact - 19972 
Person.Address - 19614 
Sales.CustomerAddress - 19220 
Sales.Customer - 19185 
Sales.ContactCreditCard - 19118 
Sales.CreditCard - 19118 
Sales.Individual - 18484 
Sales.CurrencyRate - 13532 

당신은 테이블에 있음을 이용하여 다양한 변화를 시도 할 수 있습니다. 예를 들면 다음과 같습니다.

SELECT * FROM Sales.SalesOrderDetail s 
INNER JOIN Production.Product p ON s.ProductID = p.ProductID 

내 컴퓨터에서 9 초 동안 실행됩니다.

당신은 을 실행할 수 있습니다

SELECT * FROM Production.TransactionHistory th 
INNER JOIN Production.TransactionHistoryArchive tha ON th.Quantity = tha.Quantity 

내부는 색인화되지 않은 테이블에 가입 할 수 있습니다. 매우 인공적인 예이지만 지금은 내 컴퓨터를 굴리는 데 2 ​​분 이상 걸립니다. 지금 - 20 분 이상. 지금 - 1 시간 20 분.

+0

의 루트이며 인덱스가없는 열에 "WHERE ListPrice> 1000"또는 그 밖의 것을 추가하십시오. – BradC

+0

@ Lukasz - 쿼리는 100,000 개가 넘는 행을 반환하기 때문에 9 초 (내 컴퓨터에서 3 초) 동안 실행됩니다. 테이블 스캔을 위해 바쁘기 때문에가 아닙니다. 두 테이블 모두 이미 ProductID에 대한 인덱스를 가지고 있으므로 그만큼 향상시킬 수 없습니다. – rein

+0

@BradC - 올바른 접근법입니다 (인덱스되지 않은 열로 필터링하는 것이 좋으며 인덱스되지 않은 열로 결합하는 것입니다).하지만 불행히도 제가 찾고있는 나쁜 성능을 제공하는 지점에 도달 할 수 없습니다. . – rein

0

해당 테이블이나 커서 중 하나에 대해 상관 된 하위 쿼리를 사용해보십시오.

관련 문제