我有两台运行MySQL实例的服务器。第一个是server1,运行MySQL 5.0.22。另一个是server2,正在运行MySQL 5.1.58。
当我在server1
上创建一张内存表时,我会添加一行,其大小会立即8,190.0 KiB
。
当我在server2
上创建一个内存表并添加一行时,其大小仍然只有some bytes
。
这是由于MySQL版本的差异还是(希望)这是由于我可以改变一些设置?
编辑:
我还没有找到这种行为的原因,但我确实找到了解决方法。因此,对于将来的参考,这就是为我解决的问题:
我的所有记忆表都制作一次,并且从那里开始只读。当您向MySQL指定表的最大行数时,其大小将缩小。以下查询将为您完成此操作。
ALTER TABLE table_name MAX_ROWS = N
答案 0 :(得分:0)
2倍?
好的,这个问题很可能是由UTF-8和latin1引起的 : - http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html
您可以检查两台服务器的数据库连接,数据库默认字符集。
这是我刚刚完成的测试: -
mysql> create table test ( name varchar(10) ) engine -> =memory; Query OK, 0 rows affected (0.03 sec) mysql> show create table test; +-------+------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+------------------------------------------------------------------------------------------------+ | test | CREATE TABLE `test` ( `name` varchar(10) DEFAULT NULL ) ENGINE=MEMORY DEFAULT CHARSET=latin1 | +-------+------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> insert into test values ( 1 ); mysql> set names utf8; Query OK, 0 rows affected (0.01 sec) mysql> create table test2 ( name varchar(10) ) engine =memory default charset = utf8; Query OK, 0 rows affected (0.01 sec) Query OK, 0 rows affected (0.01 sec) mysql> insert into test2 values ( convert(1 using utf8) ); Query OK, 1 row affected (0.01 sec) mysql> select table_name, avg_row_length from information_schema.tables where TABLE_NAME in( 'test2', 'test'); +------------+----------------+ | table_name | avg_row_length | +------------+----------------+ | test | 12 | | test2 | 32 | +------------+----------------+ 2 rows in set (0.01 sec)