문제

MySQL은 열 데이터 유형에 따라 테이블의 행 형식을 고정 또는 동적으로 지정합니다. 테이블에 텍스트 또는 Varchar와 같은 가변 길이 열 데이터 유형이있는 경우 행 형식은 동적입니다. 그렇지 않으면 고정되어 있습니다.

내 질문은 두 행 형식의 차이점은 무엇입니까? 하나는 다른 것보다 더 효율적입니까?

도움이 되었습니까?

해결책

차이는 실제로 MyISAM의 경우에만 중요합니다. 다른 스토리지 엔진은 그 차이에 관심이 없습니다.편집하다 : 많은 사용자들이 InnoDB가 관리한다고 언급했습니다. SteamPowered의 링크 1, Kaan의 Link 2.

고정 너비 행이있는 Myisam의 경우 몇 가지 장점이 있습니다.

  1. 행 조각화 없음 : 데이터 파일에서 단일 행을 여러 섹션으로 분할하려면 가변 너비 행이 가능합니다. 이로 인해 디스크가 추구하는 디스크를 증가시키고 작업을 늦출 수 있습니다. 최적화 테이블로 훼손 할 수는 있지만 항상 실용적인 것은 아닙니다.

  2. 데이터 파일 포인터 크기 : MyISAM에는 데이터 파일을 참조해야 할 때 사용되는 데이터 파일 포인터 개념이 있습니다. 예를 들어, 이것은 행이 실제로 존재하는 위치를 참조 할 때 인덱스에 사용됩니다. 고정 너비 크기의 경우이 포인터는 파일의 행 오프셋을 기반으로합니다 (예 : 크기에 관계없이 행은 1, 2, 3입니다). 가변 너비의 경우 포인터는 바이트 오프셋을 기반으로합니다 (예 : 행은 1, 57, 163 일 수 있습니다). 결과적으로 큰 테이블을 사용하면 포인터가 더 커져서 테이블에 더 많은 오버 헤드를 추가해야합니다.

  3. 부패의 경우 고칠 수 있습니다. 모든 행이 같은 크기이므로 MyISAM 테이블이 손상되면 수리가 훨씬 쉽기 때문에 실제로 손상된 데이터 만 손실됩니다. 가변 너비의 경우 이론적으로 가변 너비 포인터가 엉망이 될 수있어 데이터를 나쁜 방식으로 호출 할 수 있습니다.

이제 고정 너비의 주요 단점은 더 많은 공간을 낭비한다는 것입니다. 예를 들어, Varchar 필드 대신 Char 필드를 사용해야하므로 추가 공간을 차지하게됩니다.

일반적으로 스키마를 기반으로 지시되므로 형식으로 많은 선택이 없습니다. 그러나 Varchar 's 또는 단일 Blob/Text 만 있으면이를 최적화하려고 할 가치가 있습니다. 예를 들어, 유일한 바르 차를 숯으로 전환하거나 얼룩을 자체 테이블로 나누는 것을 고려하십시오.

다음에 대해 더 많이 읽을 수 있습니다.

http://dev.mysql.com/doc/refman/en/static-format.html

http://dev.mysql.com/doc/refman/en/dynamic-format.html

다른 팁

레코드를 업데이트 할 때 한 가지 주요 차이점이 발생합니다. 행 형식이 고정되면 레코드 길이가 변경되지 않습니다. 대조적으로, 행 형식이 동적이고 새로운 데이터로 레코드가 길이가 증가하는 경우 링크는 "오버 플로우"데이터를 가리키는 데 사용됩니다 (즉, 오버 플로우 포인터라고 함).

이것은 테이블을 조각하고 일반적으로 물건을 느리게합니다. 해제 (최적화 테이블)에 대한 명령이있어 문제를 다소 완화시킵니다.

MySQL의 문서 의이 페이지는 여기에서 가장 큰 답변과 모순되는 것 같습니다. 동적 행 형식에서 InnoDB 테이블에 대한 의미도 있습니다.

http://dev.mysql.com/doc/innodb/1.1/en/innodb-row-format-dynamic.html

고정 된 것은 모든 행이 정확히 같은 크기임을 의미합니다. 즉, 데이터 페이지의 3 번째 행을로드 해야하는 경우 정확히 PageHeader+2*Rowsize에있어 액세스 시간이 절약됩니다.

동적 레코드의 시작을 찾으려면 추가 간접이 포함 된 레코드 오프셋 목록을 참조해야합니다.

요컨대, 동적 행에 약간의 성능이 히트합니다. 아니요, 그다지 큰 것은 아닙니다. 문제가 될 것이라고 생각되면 테스트하십시오.

고정 된 char-lenght의 단점으로 고정 된 것은 동적보다 더 빠르고 안전해야합니다. 이 정보는 여기에서 찾을 수 있습니다. http://dev.mysql.com/doc/refman/en/static-format.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top