2012-07-18 6 views
1

문서에 나와 있듯이 mysql은 varchar에 지정한 전체 공간을 할당하지 않습니다. 데이터의 실제 길이를 저장합니다. 그래서 거기에 부작용이있을 수도 있습니다. 마치 varchar 레코드의 원래 길이가 10 인 것처럼 이제는 20으로 업데이트하려고합니다. 그래도 지정된 제한값 인 50에 도달하지는 못합니다. 그러나 이전에 할당 된 공간은 충분하지 않습니다. 제 질문은 MySQL이 이와 같은 상황을 어떻게 처리 하는가입니다. 기록을 따르는 모든 것을 옮기는 데 시간이 오래 걸릴까요? 아니면 그렇게해야합니까? 내부적으로 어떻게 작동하는지 알려주는 사람이 있습니까? 미리 감사드립니다!varchar (x)를 사용하면 해가됩니까?

+1

디스크 저장 영역 최적화가 이루어지는 한 관계형 데이터베이스는 지난 40 년 동안 먼 길을 왔다가 믿습니다. 작은 것들을 땀을 내지 마라. – Olaf

답변

1

MySQL은 충분히 다루기 때문에 세부 사항에 신경 쓰지 않아야합니다. 고정 길이 레코드를 사용하는 것보다 불규칙한 길이 레코드를 사용하는 것이 관리가 다소 느리지 만 레코드가 일반적으로 고정 된 크기보다 작 으면 훨씬 적은 데이터를 읽음으로써 성능이 크게 향상됩니다.

CHAR 열은 항상 최대 크기로 저장되고 검색된다는 것을 기억하십시오. 255 자 필드는 평균 레코드에 10-15 바이트의 데이터 만 있으면 255 바이트를 전송해야합니다. 이것은 상당량의 오버 헤드입니다.

CHAR을 사용하면 필드가 항상 그 길이가되므로 전체 호스트에서 제거되어야하며 전체적으로 전송해야하기 때문에 다른 문제가 발생합니다. 이것은 가치있는 것보다 더 큰 문제입니다.

CHAR 열에 대한 현대 시대의 유일한 용도는 항상 정의되며 항상 특정 크기가되는 것입니다. 하나의 예가 식별자로 사용되는 40 문자 16 진 코드 해시 일 수 있지만 일반적으로 거의 사용되지 않으며 거의 ​​모든 경우에 VARCHAR도 사용할 수 있습니다.

+0

'char '를 사용할 수있는 몇 가지 예를 생각해 볼 수 있습니다 - potcode, 전화 번호, 국민 보험 번호 등. 그러나 대부분의 경우'varchar'가 더 좋습니다. –

+0

우편 번호는 국가 내에서도 상당히 다르며 전화 번호에는 내선 번호가있을 수 있습니다. 당신이 감히 * 무언가가 특정한 고정 길이라고 가정한다면, 당신은 대개 놀랍습니다. 전 CHAR (5)'우편 번호 필드를 사용하여 데이터베이스를 만들지 않기를 바랍니다. 이전에 보았으므로 분노를 넘어서는 것입니다. – tadman

관련 문제