다른 스토리지 엔진에 필요한 스토리지 요구 사항을 파악하려고합니다. 나는 어떤 값을 삽입 한 후 나는 다음과 같은 얻을 show table status;
을 실행하면InnoDB 테이블 크기가 예상보다 훨씬 큰 이유는 무엇입니까?
CREATE TABLE `mytest` (
`num1` int(10) unsigned NOT NULL,
KEY `key1` (`num1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
: :이 테이블이
+----------------+--------+---------+------------+---------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+ | 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 | InnoDB | 10 | Compact | 1932473 | 35 | 67715072 | 0 | 48840704 | 4194304 | NULL | 2010-05-26 11:30:40 | NULL | NULL | latin1_swedish_ci | NULL | | |
공지 사항 AVG_ROW_LENGTH 내가 InnoDB하지만 공간을보다 효율적으로 사용할 수 있도록하지 않을 것이라고 당황하고 35입니다 내가 null이 아닌 정수를 저장할 때.
동일한 테스트를 myISAM에서 실행했으며 기본적으로 myISAM은이 테이블에서 행당 7 바이트를 사용합니다. 내가 실행할 때
ALTER TABLE mytest MAX_ROWS=50000000, AVG_ROW_LENGTH = 4;
결국 myISAM은 마침내 5 바이트 행을 올바르게 사용하게됩니다.
InnoDB에 대해 동일한 ALTER TABLE 문을 실행하면 avg_row_length가 변경되지 않습니다.
왜 4GB의 부호없는 정수만 저장할 때 왜 큰 avg_row_length가 필요합니까?
InnoDB는 데이터와 인덱스 모두에 테이블 스페이스를 사용합니다. 이것은 의미가 있으며, 왜 이렇게 큰 avg_row_length ...를 보는지 이유가 될 것 같습니다. 또한 각 리프 노드는 트랜잭션 ID와 롤백 포인터를 저장한다는 것을 알게되었습니다. 그럼 나는 당 거래를 사용하지 않으므로이 데이터를 사용하지 않아도된다. 이 값을 저장하지 않는 방법이 있습니까? 어떤 식 으로든 InnoDB를 사용할 수 있지만 스토리지를 좀 더 잘 활용할 수 있습니까? 덕분에 ! –
@alessandro : 예, 트랜잭션 지원은 약간의 오버 헤드도 추가합니다. 트랜잭션을 사용하지 않는다고해서 사용되지 않는다는 의미는 아닙니다. 예를 들어 긴 UPDATE 작업 중에 죽은 스레드는'InnoDB'에서 올바르게 롤백되지만 MyISAM에서는 롤백되지 않습니다. 트랜잭션 지원은'InnoDB' 사용의 요점입니다. 필요하지 않다면'MyISAM' 만 사용하십시오. – Quassnoi
@Quassnoi : MyISAM이 InnoDB로서의 "성숙한"또는 생산 준비가되지 않았다는 인상을 받았습니다. 아마 그것은 근거없는 공포입니다. MyISAM이 일관성을 보장하기 위해 전체 테이블 잠금을 필요로한다는 사실 외에도 데이터베이스를 백업 할 때 MyISAM이 테이블에 가져 오는 어려움이 있습니까? 나는 거래를 요구하지 않으며 나는 많은 양의 데이터를 저장할 것이다. MyISAM에 알려진 문제가있어 사용하지 않을 것입니까? –