2012-04-28 4 views
0

사용자 통계 테이블 (테이블에 100 만 개 이상의 레코드가 있음)에서 마지막 50 개 레코드를 가져와야합니다. 아래 쿼리를 실행하면 응답 속도가 매우 느려지고 IIS7 풀 메모리 사용량이 최대 800MB로 증가합니다. 쿼리가 SQL Server에서 실행되고 응용 프로그램 자체에서는 실행되지 않는다고 생각했습니다. 이 쿼리를 최적화하는 방법은 무엇입니까?서버에서 쿼리 수행

user.Statistics.OrderByDescending(p => p.DateStamp).Take(50); 

답변

1

이 쿼리는 서버에서 실행됩니다. 내 생각 엔 당신이 DateStamp 열에 적절한 인덱스가 없기 때문에 쿼리가 느리다는 것입니다.

LinqPad 사본을 아직 가지고 있지 않은 경우 LinqPad에서이 쿼리를 실행하여 서버로 전송되는 T-SQL (LinqPad로 수행 할 수있는 작업)을 참조하십시오.), T-SQL을 가져 와서 SSMS의 쿼리 실행 계획을 살펴보십시오. 인덱스 스캔 대신 테이블 스캔이 완료 될 것입니다.

적절한 인덱스를 사용하면이 쿼리는 테이블에 1 천만 행이 있더라도 <에서 최대 1-2 초 실행됩니다.

관련 문제