이 쿼리는 SqlServer 2008 R2에서 실행되며 약 6 초가 걸리고 약 8000 개의 레코드가 반환됩니다. OrderItemView
은보기이며 DocumentStationHistory
은 테이블입니다.동일한 쿼리의 실행 시간이 다릅니다. SQL Server 2008 R2
SELECT o.Number, dsh.DateSend AS Expr1
FROM OrderItemView AS o INNER JOIN
DocumentStationHistory AS dsh ON dsh.DocumentStationHistoryId =
(SELECT TOP (1) DocumentStationHistoryId
FROM DocumentStationHistory AS dsh2
WHERE (o.DocumentStationId = ToStationId) AND
(DocumentId = o.id)
ORDER BY DateSend DESC)
WHERE (o.DocumentStationId = 10)
하지만 where 절, 그것은 약 200 레코드를 반환하지만, 약 90 초 정도 걸릴 o.DocumentStationId = 8
과 같은 쿼리를 실행할 때!
문제가 어디에 있는지 생각해보십시오.
자세한 내용은 쿼리 계획을 확인하십시오. 옵티마이 저가 변경 사항에 따라 다른 계획을 선택하고 있다고 가정합니다. – frlan
'o.DocumentStationId'에 색인이 있습니까? – Raj
동일한 결과를 갖는 동일한 캐시 된 계획을 사용 중일 수 있습니다. 두 쿼리에 대한 실제 실행 계획을 비교하고 다시보고하십시오. – dean