2011-07-29 2 views
3

레코드 수가 매우 많기 때문에 인도식 휴대 전화 번호를 MySQL 테이블에 저장한다고 가정합니다. 스토리지를 최적화하고 싶습니다. 인도 휴대 전화 번호는 10 자리이며 일반적으로 7,8 또는 9로 시작합니다. 예 : 9XXXXXXXXX.mysql에 4 바이트 또는 8 바이트 대신 정수를 저장하기 위해 N 바이트를 할당하는 방법은 무엇입니까?

관련 MySQL의 필드는 :

바와 같이
Type Storage  Minimum Value   Maximum Value 
      (Bytes)  (Signed/Unsigned)  (Signed/Unsigned) 

INT  4   -2147483648    2147483647 
          0     4294967295 <-- somewhat small 

BIGINT 8  -9223372036854775808  9223372036854775807 
         0    18446744073709551615 <-- too large 

는 부호 INT 조금 작은 (값의 절반 정도)이고, 부호 BIGINT는 10 자리 숫자를 저장하는 매우 크다. 5 바이트 만 있으면이 데이터를 저장할 수 있습니다.

내 질문이 있습니다 : -

A) 바이트의 사용자 지정 숫자를 할당하고 사용 가능한 데이터 유형의 유형 MYSQL에서이 데이터를 저장할 수있는 좋은 방법이 있나요?

b) 조기 최적화입니까? 이 모든 시도에 어떤 장점/단점이 있습니까?

c) 4 바이트 및 8 바이트 숫자와 같은 자연 크기 데이터 유형을 갖고 데이터베이스의 5 바이트 및 6 바이트와 같은 중간 크기를 무시하면 어떤 이점이 있습니까?

참고 : 10 자리 숫자는 전화 번호가 아니라 10 자리 정수라고 가정합니다. VARCHAR은 내가 찾고있는 것이 아닙니다.

답변

3

전화 번호에 VARCHAR()을 사용해야한다는 @diEcho에 동의합니다. 내 생애에는 6 자리, 7 자리, 9 자리 (다른 카운티에 거주하고 있으며 국가 코드와 내 번호를 입력해야 함) 13 자리 숫자가 있습니다.

산술을 수행하지 않거나 "20> 9"와 같은 비교가 실제로 필요하지 않으면이 데이터를 문자로 남겨 두어야합니다.

INT 또는 BIGINT에 쉽게 맞지 않는 고정 된 숫자가 필요한 비슷한 문제가 발생하면 숫자 비교가 필요합니다. 그런 다음 DECIMAL (10 진수 지정자없이)을 사용하십시오.).

+0

감사. 도움이됩니다. – DhruvPathak

0

가 .. INT 또는 BIGINT..use VARCHAR (10)를 사용 해달라고 데이터베이스에 삽입하기 전에 데이터를 살균 많은 붙박이 기능은 MySQL과 PHP (난 당신이 PHP를 사용한다고 가정)

입니다

당신이 선택할 수밖에 모든 경우 후 다음 전화 nymber이 (이름에 반하는)없는 숫자입니다

BIGINT UNSIGNED 
+0

은 varchar가 10 + 1 = 11 바이트가되지 않습니까? 가능한 모든 정수 솔루션을 찾고있었습니다. – DhruvPathak

2

사용합니다. 전화 번호, 우편 번호, 일련 번호 등은 텍스트 데이터이므로 텍스트 (CHAR (10)/VARCHAR (10 + reserve) - ascii collation)로 저장해야합니다. 당연히 훨씬 더 큰 스토리지 요구 사항이 발생하지만 그만큼 커질 것입니다. 어쨌든 몇 개의 수를 저장할 것입니까?

숫자 필드에 전화 번호를 저장하는 데 사용되는 ICQ라는 IM이 있습니다. 어떻게 알 수 있습니까? 내 번호가 0으로 시작하기 때문에

1

전화 번호는 실제로 숫자가 아닙니다. 우리는 숫자를 계산하지 않습니다. INTs 및 BIGINT와 같은 수량은 컴퓨터가 이러한 크기로 자연스럽게 산술 연산을 수행하기 때문에 4 및 8 바이트입니다.

할 일은 전화 번호를 CHAR (10)로 취급하는 것입니다. 이것을 5 바이트를 사용하여 10 바이트를 사용하는 것이 비효율적이라고 생각할 수 있지만 전체 데이터 볼륨 (이름과 주소와 같은 다른 데이터는 훨씬 더 큽니다)을 고려하면 레코드 당 5 바이트의 "낭비"가 발생할 것입니다. 많은. 디스크 공간은 싸고, 프로그래머 시간은 비쌉니다. 작동 할 수있는 가장 단순한 작업을 수행하십시오.

+0

또한 5 바이트 디스크 공간의 "절약"은 문자를 바이너리로 다시 변환하고 다시 되돌려주는 CPU의 "비용"을 고려하면 손실이됩니다. –

관련 문제