MySQL 占用空间的疑问
小小小小周 2011-10-12 09:24:28
1:字符集latin1,字符类型 int,存储引擎MYISAM
结构:
mysql> desc a;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
向表中插入1条记录,MYD文件由0变成7
-rw-rw---- 1 mysql mysql 8.4K 09-27 18:32 a.frm
-rw-rw---- 1 mysql mysql 7 09-27 21:52 a.MYD
-rw-rw---- 1 mysql mysql 1.0K 09-27 21:52 a.MYI
再像表中插入1条记录,MYD文件由7变成14
-rw-rw---- 1 mysql mysql 8.4K 09-27 18:32 a.frm
-rw-rw---- 1 mysql mysql 14 09-27 21:52 a.MYD
-rw-rw---- 1 mysql mysql 1.0K 09-27 21:52 a.MYI
疑问:
理论上int 是占用4个字节的,为什么上面测试下来要占用7个字节,并且以7字节增加?难道还有存一些 行号 等相关信息吗?
2:字符集latin1,字符类型 varchar/char,存储引擎MYISAM
表结构:
mysql> desc ttt;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name | char(10) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
mysql> desc test_table;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(10) | NO | | | |
+-------+-------------+------+-----+---------+-------+
1 row in set (0.00 sec)
向上面的表中插入一条数据“abc”,并查看其MYD大小。
-rw-rw---- 1 mysql mysql 8.4K 09-27 21:43 test_table.frm
-rw-rw---- 1 mysql mysql 20 09-27 22:00 test_table.MYD
-rw-rw---- 1 mysql mysql 1.0K 09-27 22:00 test_table.MYI
-rw-rw---- 1 mysql mysql 8.4K 09-27 21:44 ttt.frm
-rw-rw---- 1 mysql mysql 11 09-27 22:00 ttt.MYD
-rw-rw---- 1 mysql mysql 1.0K 09-27 22:00 ttt.MYI
疑问:
为什么在varchar中占用的空间要20字节,而char 的需要11字节?
理论上来说,上面的varchar上应该占用4个字节,而char中应该是10个字节。
再插入一条数据“csdn”并查看其MYD大小。
-rw-rw---- 1 mysql mysql 8.4K 09-27 21:43 test_table.frm
-rw-rw---- 1 mysql mysql 40 09-27 22:02 test_table.MYD
-rw-rw---- 1 mysql mysql 1.0K 09-27 22:02 test_table.MYI
-rw-rw---- 1 mysql mysql 8.4K 09-27 21:44 ttt.frm
-rw-rw---- 1 mysql mysql 22 09-27 22:02 ttt.MYD
-rw-rw---- 1 mysql mysql 1.0K 09-27 22:02 ttt.MYI
varhcar类型的表以20字节的大小增加,char 类型的表以11字节的大小增加。
想通过这个方法来计算表占用的空间大小,但是和理论差距很大,不知道哪里出问题了。
求指教!