2009-12-16 8 views
1

저는 데이터베이스에 모든 날짜를 UTC 시간으로 몇 년 동안 저장했지만 최근에는보고 서비스에서 날짜 범위 쿼리를 처리하는 것이 점점 어려워지고 있습니다. 현지 시간으로 지정됩니다.SQL Server Reporting Services 및 UTC 시간

특히,의 설정이 예제 데이터를 보자 :

EmailAddress    DateCreated 
[email protected] 2009-09-01 00:00:00 
[email protected] 2009-09-01 00:00:00 
[email protected] 2009-02-28 04:00:00 
[email protected] 2009-04-27 14:33:00 
[email protected] 2009-08-31 17:28:00 
[email protected] 2009-03-19 18:57:00 
[email protected] 2009-03-01 00:49:00 
[email protected] 2009-02-28 04:00:00 
[email protected] 2009-09-01 00:00:00 
[email protected] 2009-09-16 00:00:00 

이제 클라이언트가 중앙 표준 시간을 사용하여 2 월을 위해 존재 얼마나 많은 기록을보고 싶어 가정 해 봅시다. 그룹화를하기 전에 UTC 타임 스탬프를 CST로 변환해야하기 때문에 UTC 시간을 사용하여 레코드를 쿼리 할 수 ​​없습니다. 즉, UTC 날짜가 3 월에 정식으로 표시 되더라도 CST 날짜를 사용하여 2 월에 레코드 # 7 (2009-03-01 00:49:00)을 계산해야합니다. 보통 일이 끝나는 무엇

내가 쿼리가 보이는하도록 날짜를 변환하는 함수를 작성하는 것이 그래서 같은 :

select 
    dbo.ConvertToLocalDate(DateCreated), 
    count(*) as [Count] 
from 
    example_table 
group by 
    dbo.ConvertToLocalDate(DateCreated) 

하지만 이러한 쿼리의 성능이보다 더 아무것도 바람직 미만 수십만 줄. 나는 현지 날짜를 미리 계산하는 열을 추가 포함하여 주제에 몇 가지 변화를 시도했습니다, 또한 수정 된 쿼리를 같은 :

select 
    t3.LocalDateCreated, 
    count(*) as [Count] 
from 
    example_table t1 
     inner join (
      select 
       t2.Email, 
       dbo.ConvertToLocalDate(t2.DateCreated) as LocalDateCreated 
      from 
       example_table t2) t3 on t3.Email = t1.Email 
group by 
    t3.LocalDateCreated 

이 모든하지만 나에게 정말 hackish 보인다. 더 좋은 방법이 있습니까?

답변

1

테이블의 지속 된 계산 열을 사용하여 로컬 날짜를 저장 한 다음 인덱싱하고 쿼리에 사용합니다.

그런 식으로 값을 삽입하면 값이 계산되지만 어디서든 직접 계산할 필요는 없습니다.

또한 스칼라 기능에 대한 내 블로그 게시물 http://msmvps.com/blogs/robfarley/archive/2009/12/05/dangers-of-begin-and-end.aspx을 읽어보십시오. 해당 기능을 사용하는 방식을 다시 생각해 볼 수 있습니다.

+0

쿼리 최적화 프로그램에 대한 함수의 영향과 함수 호출이 내 성능 문제의 주요 원인이라는 사실을 알고 있습니다. 함수 호출을 없애기 위해 로컬 날짜를 유지하기 위해 secondd 열을 사용했지만 DateCreatedUtc가 있고 그 옆에 DateCreatedLocal 열이있는 것이 이상하게 보입니다. 아마 내가해서는 안되는 것에 대해 걱정하고있을거야? – Chris

+0

나는보고 목적으로 두 번째 열을 엄격하게 요구하는 것이 이상하다고 생각합니다. – Chris

+0

예, 걱정하지 않아도됩니다. 계산 된 열 (유지됨 또는 유지되지 않음) 인 경우 무결성 문제에 대해 걱정할 필요가 없으며 성능 향상이 중요합니다. –

관련 문제