2013-04-10 2 views
1

시간 범위 내에서 행을 선택하는 데 너무 많은 시간이 걸리는 이유를 파악하려고합니다.이 간단한 경우 시간 범위 내에서 더 빨리 행을 검색하는 방법은 무엇입니까?

나는 5 백만 이상의 행을 가진 하나의 데이터베이스 테이블을 가지고 있습니다.

FooTimestamp 열에 DateTimeOffset 유형 인 비 고유 한 비 클러스터형 인덱스가 있습니다.

시간 범위 내에서 일부 행을 검색하려고하면 2 분 이상 걸립니다.

DECLARE @since datetimeoffset 
DECLARE @before datetimeoffset 

SET @since ='2013-03-20 00:00:00 +02:00' 
SET @before ='2013-03-27 00:00:00 +02:00' 

SELECT * 
WHERE ([FooTimestamp] >= @since AND [FooTimestamp] <= @before) 

질문 (내가 다시 실행하면 내가 추측, MS-SQL 서버 2008의 캐싱 기능을 상대적으로 빨리 때문이다) : 그것은 수백만 개의 레코드를 갖는 테이블에서 행을 검색하는 올 때, 쿼리 결과를 더 빠르게 얻으려면 어떻게해야합니까? (이와 같은 간단한 쿼리의 경우 2 분이 너무 많음)

+1

인덱스가 조각화되어 있습니까? 쿼리 계획이란 무엇입니까? – Paparazzi

+0

'FooTimestamp'의 인덱스를 클러스터링 할 수 있습니까? – muhmud

+0

아니오; 해당 열이 100 % 고유 값을 가지고 있는지 확인하십시오. – pencilCake

답변

0

이 특정 쿼리를 최적화하려면 FooTimeStamp 열에 클러스터 된 인덱스를 만듭니다. 클러스터 된 인덱스를 사용하면 SQL 서버는 추가 조회를 수행하지 않고도 인덱스를 사용하여 모든 행 데이터를 가져올 수 있습니다.

기존 클러스터 된 인덱스를 삭제해야합니다. 필요한 경우 클러스터되지 않은 인덱스로 다시 추가 할 수 있습니다.

반대로 사용자 의견, 클러스터 된 인덱스는 고유하지 않아도됩니다. 또한 Do clustered indexes have to be unique?

관련 문제