2012-09-21 3 views
2

많은 테이블에 수정 날짜 필드를 저장합니다. 때로는 논리에 시간 부분을 사용해야하고 때로는 날짜 부분 만 있으면됩니다. 내가 더 효율적입니다 다음 시나리오 중 어느 궁금하네요/모범 사례 :SQL Server 2008 - DATE 및 DATETIME에 대한 CONVERT 비교

  1. 두 개의 열 저장 - DATE 유형 중 하나를 입력 DATETIME 중 하나 - 모두 시간에하지만 어느 날짜에 동일한 인스턴스를 나타냅니다 열은 분명히 날짜 부분 만 저장합니다. 날짜 만 비교할 필요가있을 때 DATE 열을 사용하고 DATETIME 열을 사용하는 시간을 포함하는 비교를 수행해야 할 때가 있습니다.

  2. DATETIME 유형의 열 하나를 저장하고 CONVERT (DATE, Date_Amended_Col)를 사용하여 필요할 때마다 날짜 부분을 검색합니다.

매번 CONVERT를 사용하면 상당한 오버 헤드가 있습니까? DATE 부분이 자주 액세스되는 경우가 많아 CONVERT를 많이 사용하게 될 것 같은 느낌입니다.

두 번째 방법에 대한 명백한 단점은 수정할 수 없을 때 두 필드를 모두 업데이트해야한다는 점을 제외하고는 생각할 수 없습니다. 변경 사항을 적용 할 때 항상 트리거를 사용할 수 있습니다. 필요하다.

더 좋은 방법이 있습니까? 계산 된 열을 사용할 때마다 CONVERT를 사용하는 것과 같을까요?

의견을 보내 주시면 감사하겠습니다.

많은 감사,

답변

0

은 내가 PERSISTED 계산 열을 추천 할 것입니다. Microsoft에서 아래 정의를 참조하십시오.

달리 지정하지 않는 한 계산 열은 물리적으로 테이블에 저장되지 않는 가상 열입니다. 해당 값은 쿼리에서 참조 될 때마다 다시 계산됩니다. 데이터베이스 엔진은 CREATE TABLE 및 ALTER TABLE 문에서 PERSISTED 키워드를 사용하여 계산 된 열을 테이블에 물리적으로 저장합니다. 해당 값은 계산의 일부인 컬럼이 변경 될 때 갱신됩니다. 계산 된 열을 PERSISTED로 표시하면 결정적이지만 정확하지 않은 계산 된 열에 인덱스를 만들 수 있습니다. 또한 계산 된 열에서 CLR 함수를 참조하는 경우 데이터베이스 엔진은 함수가 실제로 결정적인지 여부를 확인할 수 없습니다. 이 경우 계산 된 열은 인덱스가 작성 될 수 있도록 PERSISTED 여야합니다.

+0

계산 된 계산 열이 정확히 내가 필요한 것처럼 보입니다. 중복 열보다 훨씬 더 깨끗합니다. 감사합니다 마이크 :) –

+0

@ AlanBuchanan, 기쁘게도 도움이 될 수 있습니다. –