[sql] MySQL 테이블에서 varchar 길이의 중요성

행이 동적으로 삽입되는 MySQL 테이블이 있습니다. 문자열의 길이를 확신 할 수없고 잘리는 것을 원하지 않기 때문에 일반적으로 필요한 것보다 훨씬 큰 varchar (200)을 만듭니다. varchar 필드에 필요한 것보다 훨씬 더 많은 길이를 제공하는 데 큰 성능 저하가 있습니까?



답변

아니요, 해당 열에 저장하는 값이 항상 (예를 들어) 50 자 미만이면 열을 다음과 같이 선언 varchar(50)하거나 varchar(200)동일한 성능을 갖는다는 의미입니다.


답변

성능에 미치는 한 가지 영향이 있습니다. MySQL에서는 임시 테이블과 MEMORY테이블이 VARCHAR열을 고정 길이 열로 저장 하고 최대 길이까지 채 웁니다. VARCHAR필요한 가장 큰 크기보다 훨씬 더 큰 열 을 디자인 하면 필요한 것보다 더 많은 메모리를 소비하게됩니다. 이는 캐시 효율성, 정렬 속도 등에 영향을 미칩니다.


답변

VARCHAR은 “가변 문자”를 나타 내기 때문에 설명하는 상황에 이상적입니다. 예에 따라 제한은 200 자이지만 그보다 적은 것은 허용 되며 할당 된 열 크기를 채우지 않습니다.

VARCHAR은 또한 공간을 덜 차지합니다. 값은 1 바이트 또는 2 바이트 길이 접두사와 데이터로 저장됩니다. 길이 접두사는 값의 바이트 수를 나타냅니다. 값이 255 바이트 이하를 요구하는 경우 열은 1 개의 길이 바이트를 사용하고, 값이 255 바이트 이상을 요구할 수있는 경우 2 개의 길이 바이트를 사용합니다.

MySQL CHAR와 VARCHAR 데이터 유형을 비교하는 자세한 정보는 이 링크를 참조하십시오 .


답변

크기는 성능입니다! 크기가 작을수록 좋습니다. 오늘이나 내일은 아니지만 언젠가는 어떤 디자인을 설계하든 심각한 병목 현상이 발생할 때 테이블이 커질 것입니다. 그러나 먼저 발생할 가능성이있는 설계 단계에서 잠재적 인 병목 현상 중 일부를 예측하고 계획을 재고하거나 서버를 추가하여 수평으로 확장해야 할 때까지 DB가 빠르고 행복하게 수행되는 시간을 늘릴 수 있습니다.

귀하의 경우에는 많은 성능 누수가 발생할 수 있습니다. 큰 조인은 거의 불가능합니다. varchar 있습니다. 열 합니다. 이러한 열에 대한 인덱싱은 진정한 킬러입니다. 디스크는 데이터를 저장해야합니다. 하나의 메모리 페이지는 더 적은 행을 보유 할 수 있으며 테이블 스캔은 훨씬 느립니다. 또한 쿼리 캐시는 여기서 도움이되지 않을 것입니다.

스스로에게 물어보아야합니다. 연간 몇 번의 삽입물이 발생할 수 있습니까? 평균 길이는 얼마입니까? 실제로 200 자 이상이 필요합니까? 아니면 사용자에게 최대 길이를 알려주는 경우에도 애플리케이션 프런트 엔드에서이를 포착 할 수 있습니까? 빠른 인덱싱 및 스캔을 위해 테이블을 좁은 테이블로 분할하고 확장 크기의 덜 자주 필요한 추가 데이터를 보관하기 위해 다른 테이블로 분할 할 수 있습니까? 가능한 varchar 데이터를 범주에 입력하여 데이터 중 일부를 int 또는 bool 유형의 작은 열로 추출하고 그런 식으로 varchar 열을 좁힐 수 있습니까?

여기서 많은 일을 할 수 있습니다. 첫 번째 가정을 한 다음 실제 측정 된 성능 데이터를 사용하여 단계별로 다시 설계하는 것이 가장 좋습니다. 행운을 빕니다.


답변

공연? 아니요. 디스크 스토리지? 예,하지만 저렴하고 풍부합니다. 데이터베이스가 테라 바이트 규모로 성장하지 않는 한 괜찮습니다.


답변

여러분 중 일부는 .NET varchar(200)보다 디스크에서 더 많은 테이블 크기를 차지 한다고 잘못 생각 하고 varchar(20)있습니다. 그렇지 않다. 255자를 넘을 때만 mysql은 varchar필드 데이터 의 길이를 결정하기 위해 추가 바이트를 사용합니다 .


답변

성능 저하가있을 수 있지만 일반적으로 대부분의 사용자가 알아 차릴 수있는 수준은 아닙니다.

각 필드의 크기를 미리 알면 MySQL은 각 필드 / 행 사이에 얼마나 많은 바이트가 있는지 정확히 알고 모든 데이터를 읽지 않고 페이지 앞으로 이동할 수 있습니다. 가변 문자를 사용하면 이러한 최적화 기능이 저하됩니다.

varchar가 데이터 조각화로 인해 성능 저하를 초래합니까?

더 나은 것은 char 대 varchar 입니다.

대부분의 경우 어느 쪽이든 괜찮지 만 차이 있으며 대규모 데이터베이스의 경우 둘 중 하나를 선택해야하는 이유가 있습니다.