2009-03-30 3 views

답변

24

데이터베이스에 연도를 저장해야하는 경우 Integer 데이터 형식을 사용하거나 연도를 저장하는) 또는 DateTime 데이터 유형 (기본적으로 형식으로 1/1/1990 00:00:00 인 날짜를 저장하는 작업이 포함됩니다).

+7

** 게으르지 말고 "단지 int를 사용하십시오". ** 데이터 유형의 크기를 적절히 지정하면 2 바이트 정수를 사용하는 것이 더 좋습니다.4 자리 연도를 4 바이트로 저장하면 디스크 공간보다 많은 자원을 낭비하게됩니다. 시스템은이 컬럼에 대해 두 배의 캐시 메모리를 사용하고 IO 데이터 양을 두 배로 밀어서 영원히 부담이 될 것입니다. http://dba.stackexchange.com/q/4968 –

0

그냥 1 년, 다른 건 없나요? 간단한 정수를 사용하지 않는 이유는 무엇입니까?

+0

Ohh god, 상식으로 – peter

+4

안녕하세요! 왜 그렇게 간단한 일을하려고합니까? 우리는 SO 질문이 부족합니다! –

1

저장해야하는 것이 모두 연도 인 경우 정수를 사용하십시오. 이 열을 쿼리하는 동안 날짜 기반 계산이 있다고 생각되는 경우 datetime을 사용할 수도 있습니다.

+0

고마워, 그건 내 실수 야. – peter

25

일반 4 바이트 INT는 큰 방법으로 공간 낭비입니다!

어떤 데이터베이스를 사용하고 있는지 말하지 않으므로 특정 데이터 유형을 추천 할 수 없습니다. 모두가 "정수 사용"을 말하고 있지만 대부분의 데이터베이스는 4 바이트로 정수를 저장합니다. 이는 필요한 것 이상입니다. SQL Server에서는 2 바이트 정수 (smallint)를 사용해야 공간을 더 효율적으로 사용할 수 있습니다.

+1

대다수의 현대 프로세서는 처리 효율이 더 높기 때문에 int를 사용하여 공간을 낭비하는 것이 더 작은 데이터 유형을 사용하는 것이 더 낫습니다. 작은 정수보다 32 비트 정수 (32 비트)입니다. – Ender

+0

@Ender, 당신은이 값들을 가지고 수학을 실제로하고있는 것이 아니라, 스토어와 룩업 과정에 더 가깝습니다. 크기가 작 으면 램에 더 많은 값을 저장할 수 있습니다. 디스크가 작 으면 더 많은 값을 읽을 수 있습니다. 아이디어를 지원하는 기사를 찾을 수 없습니다. http://dba.stackexchange.com/q/4968 –

+1

모든 프로그램이 끝에 기계 코드로 컴파일되고 번호가 레지스터에로드됩니다. 최신 CPU 아키텍처에서 모든 레지스터는 32 비트 또는 64 비트입니다. 따라서 RDBMS 시스템은 쿼리의 조건을 충족시키기 위해 비교를 위해 레지스터에 해당 숫자를 입력해야합니다. 그리고 작은 int 및 small int의 경우, 그것은 시간이 많이 소요되는 매번 변환을해야합니다. int를 사용하면 더 많은 IO가 필요하고 더 많은 입출력이 필요하기 때문에 일반적으로 CPU와 IO 사이의 트레이드 오프이기 때문에 내 요점 또는 요점을 지원하는 공식 문서를 찾을 수 없습니다. – Ender

9

안녕하십니까, 연도() 데이터 형식을 두 자리 또는 네 자리 형식으로 사용할 수 있습니다.

참고 : 값은 네 자리 형식으로 허용 : 1901 2155.에 값이 두 자리 형식으로 허용 : 칠십년 나타내는 69, 1970에서 2069

2

에 이상적으로 달려 MSSQL에서 "년도"저장 당신이 그걸로 무엇을하는지, 그리고 그 해의 의미가 당신의 어플리케이션과 데이터베이스에 어떤 영향을 미치는지에 대한 것입니다. 여기에는 몇 가지 사실이 언급되어 있습니다. MSSQL에는 2012 년 현재 "데이터 유형"이 없습니다. SMALLINT는 단지 2 바이트 (INT가 요구하는 4 바이트 중 2 바이트를 절약 할 수 있기 때문에)로 사용하려고합니다. SQL Server 2008 R2에서와 같이 32767보다 오래된 연도를 가질 수 없다는 한계가 있습니다. 나는 SQL이 지금부터 1 천년 동안 선택의 데이터베이스가 될 것이라고 생각하지 않는다. 32767은 그렇다. MSSQL에서 INT를 Year() 함수로 생각하면 데이터 유형 "DATE"가 INT로 변환된다. 내가 말했듯이, 그것은 당신이 어디서 데이터를 얻고 어디로 가고 있는지에 달려 있지만, SMALLINT는 괜찮을 것입니다. 위에 언급 한 것과 같은 다른 이유가 있거나 코드 요구 사항이 INT 형식 (예 : 기존 응용 프로그램과의 통합)이 필요한 경우가 아니면 INT가 과도하게 사용됩니다. SMALLINT 가능성이 높습니다.

0

스토리지는 문제의 일부 일 수 있습니다. 이 값은 쿼리에서 어떻게 사용됩니까?

다른 날짜 - 시간 데이터 형식과 비교할 것인지, 아니면 관련된 모든 행에도 숫자 값이 있습니까?

요구 사항 변경은 어떻게 처리합니까? 한 해를 작은 시간 조각으로 대체하라는 요청에 얼마나 쉽게 대응할 수 있습니까? 즉 지금 그들은 그것이 분기별로 세분화되기를 원합니까?

숫자 형식은 시작 시간 및 종료 날짜 (1/1/X ~ 12/31/x) 등을 포함하는 검색 테이블을 포함하여 날짜 쿼리에서 쉽게 사용할 수 있습니다.