POC 색인이 필요합니다. 색인 생성 가이드 부분을 SQL Server 2012: How to Write T-SQL Window Functions, Part 3 부분으로보십시오.
그래서 귀하의 경우 색인의 첫 번째 열로 Price_Id
을 입력해야합니다.
create index IX_Samples_POC on dbo.Samples(Price_Id, date desc);
인덱스가 있어도 SQL Server에서 인덱스를 사용한다고 보증 할 수 없습니다. 모든 행과 모든 열을 쿼리하므로 클러스터 된 인덱스 스캔이나 테이블 스캔이 가능할 수도 있습니다. 모두 다른 인덱스가 인덱스에 포함되어있을 가능성이 있습니다 (클러스터형 키가 자동으로 포함됩니다.).
파생 테이블에서 row_number
을 사용하고 나머지 열을 반입하는 테이블에 결과를 다시 조인하면 테이블 구조가 어떻게 생겼는지에 따라 인덱스를 사용하는 것이 더 빠를 수 있습니다.
클러스터 키인 기본 키 ID가 있다고 가정하면 이와 비슷한 형태가됩니다.
select S.*,
T.r
from Samples as S
inner join (
select ID,
row_number() over(partition by Price_Id
order by date desc) as r
from dbo.Samples
) as T
on S.ID = T.ID;
또 다른 옵션은 필요한 열을 색인에 포함시키는 것입니다. 아마 실제로 모든 컬럼이 필요할 경우에는 좋은 생각이 아닙니다.
create index IX_Samples_POC on dbo.Samples(Price_Id, date desc)
include(Col1, Col2);
에 모두 인덱스를 사용하지에 비해 커버링 인덱스 사이의 가장 큰 차이점은 SQL 서버를 열거 할 수 있도록 행의 정렬을 할 수 있다는 것입니다. 인덱스는 이미 해당 정렬을 제공합니다.
'*'을 제거하고 열 이름을 지정하십시오 (필수) –