테스트 테이블이 있습니다. 테스트 테이블은 다음과 같습니다 :MySQL + MyISAM 테이블 크기 질문
CREATE TABLE `mytest` (
`num1` int(10) unsigned NOT NULL,
KEY `key1` (`num1`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
이 테이블에 5 천만 개의 행이 삽입되었습니다.
테이블 상태를 표시 할 때 avg_row_length는 7입니다. mySQL에서 정수로 4 바이트를 사용했기 때문에 4가 표시 될 것으로 예상했습니다. 키가 avg_row_length에 영향을 줍니까? 내 .MYD 파일을 볼 때 크기는 334MB이며 avg_row_length가 7이라는 점을 정확히 알고 있어야합니다. 그러나 실제로는 int가 있다고 가정하면 실제로 190MB가 표시됩니다.
+----------------+--------+---------+------------+----------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+----------------+--------+---------+------------+----------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| mytest | MyISAM | 10 | Fixed | 50000000 | 7 | 350000000 | 1970324836974591 | 600518656 | 0 | NULL | 2010-05-22 09:15:06 | 2010-05-22 19:32:53 | NULL | latin1_swedish_ci | NULL | | |
mytest 테이블의 표시 테이블 상태 출력을 포함 시켰습니다. 형식에 대해 죄송합니다 : D 미리 감사드립니다!
알레산드로 Ferrucci는
이 3byte 오버 헤드가 다른 크기에서 일관되게 유지됩니까? 열쇠가 없다면 어떻게 될까요? 내가 찾은 최선책은 다음과 같습니다 : http://forge.mysql.com/wiki/MySQL_Internals_MyISAM 필자는 "컬럼에 3byte의 오버 헤드가 항상 있습니다."와 같은 것을 발견하지 못했습니다. – Mike
이것은 특이합니다. MyISAM은 일반적으로 NULL 가능 컬럼 또는 문자열을 포함하는 테이블에 대한 헤더 만 추가합니다. 헤더는 총 행 길이를 나타내며 각 NULL 가능 컬럼에 대한 비트 플래그를 포함합니다. 여기도 적용되지 않습니다. 그래서 놀랍습니다. 두 번째 "int not null"열을 추가하면 avg-row-length가 9 바이트로 변경됩니다. 1 바이트 오버 헤드. – Martin
답변은 다음 페이지에 있습니다 - 레코드 헤더를 설명하는 섹션 : http://forge.mysql.com/wiki/MySQL_Internals_MyISAM#MyISAM_Record_Structure 레코드가 삭제되었는지 여부를 나타내는 플래그가 있습니다. 이렇게하면 NULLable 열이없는 테이블의 단일 바이트 레코드 헤더가 설명되지만 3 바이트 헤더는 설명되지 않습니다. – Martin