2013-05-09 1 views
0

테이블 (오늘)을 반환해야합니다. 나는이 일을하는 쿼리를 사용하고 있지만 내가 원하는만큼 빠르지는 않습니다.SQL 오늘 데이터로 돌아 가기

현재 쿼리

WHERE (CallDetail.DNIS='456456') AND CallDetail.ConnectedDateTimeGmt > CAST(FLOOR(CAST(GETDATE() AS FLOAT))AS DATETIME) 

내가 초 만에 데이터의 지난 주 가치 수익률을 사용하는 또 다른 쿼리.

WHERE (CallDetail.LocalName='Name') AND (CallDetail.ConnectedDate Between DATEADD(wk,-1,GetDate()) And GetDate()) 

오늘의 데이터 만 반환하는 데 사용할 수있는 더 효과적인 쿼리가 있습니까?

+0

은 사용 가능한 날짜 데이터 유형입니까? –

+0

두 개의 검색어가 일치하지 않습니다. 하나는 Comparison DNIS이고 다른 하나는 LocalNames입니다. 두 번째 쿼리의 속도를 높이는 LocalName에 대한 인덱스를 가지고 있다면 놀라지 않을 것입니다. 날짜 비교는 다른 분야에 있습니다. –

답변

0

대신

WHERE (CallDetail.DNIS='456456') 
AND CallDetail.ConnectedDateTimeGmt > CAST(FLOOR(CAST(GETDATE() AS FLOAT))AS DATETIME) 

이 GETDATE()

WHERE (CallDetail.DNIS='456456') 
AND CallDetail.ConnectedDateTimeGmt > DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 
0

만약에서만 날짜 부분을 반환하는 빠른 방법을 사용 속도가 느려집니다 쿼리 GETDATE()에서 날짜 부분을 반환하는 두 번 캐스팅 쿼리 속도를 높이고 인덱스에 대해 생각하고 싶습니다. 이 쿼리의 경우 가장 효과적인 인덱스는 CallDetail(DNIS, ConnectedDateTimeGmt)입니다.

CallDetail(ConnectedDate) 또는 CallDetail(LocalName)에 색인이 있기 때문에 두 번째 쿼리가 더 빨리 실행되고 있습니다.

필드 이름이 아닌 getdate()에서 날짜 산술만을 수행하는 것은 색인의 사용을 방해 할 수 있습니다. 최신 버전의 SQL Server를 사용하는 경우 가장 쉽게 읽을 수있는 방법은 변환을 위해 cast(getdate() as date)입니다. 그러나 쿼리 속도를 높이는 방법은 인덱스를 현명하게 사용하는 것입니다.

0

날짜에 크로스 조인을 사용하면이 값을 한 번만 계산할 수 있지만 성능에 어떤 영향을 미치는지는 모르겠지만 이전에는이 ​​값을 사용했지만 항상 인덱스를 치는 것처럼 보였습니다.

SELECT * 

FROM [MyData] 
CROSS JOIN (DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) AS CURRDATE) XJOIN 

WHERE (CallDetail.DNIS='456456') 
AND CallDetail.ConnectedDateTimeGmt > XJOIN.CURRDATE 
관련 문제