MySQL 행 형식:고정과 동적의 차이점
MySQL은 열의 데이터 유형에 따라 테이블의 행 형식을 고정 또는 동적 형식으로 지정합니다.테이블에 TEXT 또는 VARCHAR과 같은 가변 길이의 열 데이터 유형이 있는 경우 행 형식은 동적이며, 그렇지 않은 경우 고정입니다.
두 행 형식의 차이는 무엇입니까?한쪽이 다른 쪽보다 더 효율적입니까?
차이점은 MyISAM에만 해당되며 다른 스토리지 엔진은 그 차이를 신경 쓰지 않습니다.편집 : 많은 사용자들이 InnoDB가 중요하다고 코멘트했습니다.링크 1은 스팀파워링, 링크 2는 Kaan입니다.
MyISAM의 고정폭 행에는 몇 가지 이점이 있습니다.
행 조각화 없음:가변 폭 행을 사용하면 단일 행을 데이터 파일에 걸쳐 여러 섹션으로 분할할 수 있습니다.이로 인해 디스크 검색이 증가하고 작업이 느려질 수 있습니다.OPTIMISE TABLE로 디플러그를 할 수 있지만, 이것이 항상 실용적인 것은 아닙니다.
데이터 파일 포인터 크기:MyISAM에는 데이터 파일을 참조해야 할 때 사용되는 데이터 파일 포인터 개념이 있습니다.예를 들어 행이 실제로 존재하는 위치를 나타내는 인덱스에서 사용됩니다.고정 너비 크기를 사용하는 경우 이 포인터는 파일의 행 오프셋을 기반으로 합니다(즉, 행은 크기에 관계없이 1, 2, 3).가변 폭의 경우 포인터는 바이트 오프셋을 기반으로 합니다(즉, 행은 1, 57, 163일 수 있습니다).그 결과 테이블이 클 경우 포인터가 커야 하므로 테이블에 대한 오버헤드가 훨씬 커질 수 있습니다.
부패의 경우 수정이 용이합니다.각 행의 크기가 같기 때문에 MyISAM 테이블이 파손되면 복구가 훨씬 쉬워지므로 실제로 파손된 데이터만 손실됩니다.가변폭을 사용하면 이론적으로 가변폭 포인터가 엉켜 데이터가 잘못 숨겨질 수 있습니다.
고정 폭의 주요 단점은 더 많은 공간을 낭비한다는 것입니다.예를 들어 VARCHAR 필드 대신 CHAR 필드를 사용해야 하기 때문에 결과적으로 여분의 공간을 차지하게 됩니다.
일반적으로 스키마에 따라 지정되기 때문에 형식을 선택할 수 없습니다.단, 이를 최적화하기 위해 몇 개의 varchar 또는 단일 blob/text를 사용하는 것이 좋습니다.예를 들어, 유일한 varchar를 char로 전환하거나 blob을 자체 테이블로 분할하는 것을 고려해 보십시오.
자세한 내용은 다음 웹 사이트를 참조하십시오.
http://dev.mysql.com/doc/refman/5.0/en/static-format.html
http://dev.mysql.com/doc/refman/5.0/en/dynamic-format.html
레코드를 갱신할 때 한 가지 중요한 차이가 발생합니다.행 형식이 고정된 경우 레코드 길이는 변경되지 않습니다.반대로 행 형식이 동적이고 새 데이터로 인해 레코드의 길이가 늘어날 경우 링크를 사용하여 "오버플로" 데이터(즉, 오버플로 포인터)를 가리킵니다.
이로 인해 테이블이 조각나고 일반적으로 속도가 느려집니다.디플러그에 대한 명령어(Optimize TABLE)가 있어 문제가 다소 완화됩니다.
MySQL 설명서의 이 페이지는 DYNAMIC 행 형식이 InnoDB 테이블에도 영향을 미친다는 점에서 여기의 상위 답변과 모순되는 것으로 보입니다.
https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format.html
고정은 모든 행의 크기가 정확히 동일함을 의미합니다.즉, 데이터 페이지의 세 번째 행을 로드해야 하는 경우 PageHeader+2*RowSize로 로딩되므로 액세스 시간이 절약됩니다.
다이내믹 레코드의 선두를 찾으려면 레코드 오프셋 목록을 참조해야 합니다.이 목록에는 추가 인다이렉션이 포함됩니다.
즉, 동적 행의 퍼포먼스에 약간 영향을 줍니다.아니요, 그렇게 크진 않아요.문제가 될 것 같으면 테스트해 보세요.
고정은 동적보다 빠르고 안전해야 하며 고정 문자 표시의 단점이 있습니다.다음 정보는 http://dev.mysql.com/doc/refman/5.0/en/static-format.html 에서 찾을 수 있습니다.
언급URL : https://stackoverflow.com/questions/147315/mysql-row-format-difference-between-fixed-and-dynamic
'source' 카테고리의 다른 글
| JS 개체를 폼 데이터로 변환 (0) | 2022.09.22 |
|---|---|
| 오류 발생 시 python 디버거를 자동으로 시작하는 중 (0) | 2022.09.22 |
| java.util을 변환하고 있습니다.해시맵 속성 (0) | 2022.09.22 |
| 그룹별 오브젝트 인쇄 방법 (0) | 2022.09.22 |
| peacle.dump 사용 - TypeError:는 바이트가 아닌 str이어야 합니다. (0) | 2022.09.22 |