SQL Server 2008에서 작업합니다. 다음 테이블 "Forecast"가 있습니다.이 하위 쿼리를 피하고 인덱싱 된 뷰를 만드는 방법은 무엇입니까?
Forecast_ID | Budget_Code | IAM_ID | Forecast | Timestamp
1 | 00-0001 | 24 | 123.41 | '01-01'2010'
2 | 00-0001 | 10 | 111.41 | '02-02'2010' //Is Last
3 | 00-0001 | 44 | 457.10 | '02-02'2010' //Is Last
4 | 00-0002 | 258 | 20 | '01-05'2011' //Is Last
5 | 00-0003 | 3 | 215 | '11-12'2013' //Is Last
6 | 00-0003 | 31 | 85.2 | '10-01'2010'
7 | 00-0003 | 2 | 15 | '10-01'2010'
Budget_Code 당 마지막 "Forecasts"가있는 색인 된보기를 만들려고했습니다. 이자형. 가장 높은 타임 스탬프가있는 예측 (Budget_Code 당 하나 이상의 행).
그래서 나는 다음과 같은 쿼리를했다 :CREATE VIEW LastForecasts
WITH SCHEMABINDING
AS
SELECT Forecast_ID, Budget_Code, IAM_ID, Forecast
FROM dbo.[Plan] p1
WHERE Timestamp = (
SELECT MAX(Timestamp)
FROM dbo.[Plan] p2
WHERE p1.Budget_Code = p2.Budget_Code)
GO
CREATE UNIQUE CLUSTERED INDEX IDX_V1
ON LastForecasts (Forecast_ID);
GO
을하지만 다음과 같은 오류가 있습니다
가 하나 이상의 하위 쿼리가 포함되어 있기 때문에보기 "OperationPlanDB.dbo.LastForecasts"인덱스를 만들 수 없습니다 . 하위 쿼리 대신 조인 만 사용하도록보기를 변경하십시오. 또는이보기를 인덱싱하지 않는 것이 좋습니다.
어떻게이 하위 쿼리를 피하고 예측을 사용하여 내 뷰를 인덱싱 할 수 있습니까?
어쩌면 내가 뭔가를 놓친 적이 있지만 어떤 이유가 왜 타임 스탬프 열 (내림차순 또는 오름차순, 그것은 중요하지한다) 캔트 지수 : 더 나은 대신 쿼리의 성능 쿼리 다음 그 사용을 제안 (Forecast_ID, Budget_Code, IAM_ID, Forecast)를 덮은 다음 'TOP WITH TIES'및 'ORDER BY'를 수행하십시오. – g2server
@ g2server 각 타임 스탬프마다 하나의 행을 가질 수 있기 때문에'TOP WITH TIES'가 작동하지 않는다고 생각합니다 (내 예제에서는 예산 코드 00-0001 참조). – Alex
ok 나는 그룹핑을 놓쳤다. 그런 경우 medhi의 접근 방식이 효과가있을 것이라고 생각합니다 (그러나 RANK()로 변경하고 Timestamp의 인덱스를 사용하여 인덱스 된 뷰를 쿼리로 대체하십시오. 인덱스가 올바르게 설정되어 있으면 성능이 비슷해야합니다). – g2server