memory存储引擎用存在内存中的内容来创建表。这些在以前被认识为heap表。memory是一个首选的术语,虽然为向下兼容,heap依旧被 支持。
每个memory表和一个磁盘文件关联起来。文件名由表的名字开始,并且由一个.frm的扩展名来指明它存储的表定义。
要明确指出你想要一个memory表,可使用engine选项来指定:
create table t (i int) engine = memory;
1.表受限于mysqld变量max_heap_table_size(默认16m);
2.heap数据表从mysql4.1开始才允许使用自增列;
3.engine =heap;从mysql4.1后,首选 engine =memory;
4.from mysql 4.1 on, hash indexes are still the default, but you can specify explicitly that a memory table index should be a hash or btree;
5.与许多其他散列表不同,heap表允许非惟一的键;
6.memory表使用固定长度行的格式存储
7.不支持blob或text列;
8.除了max_heap_table_size限制和计算机的内存限制以外,可以在有些安装上达到每个表4gb的限制,
因为这个限制是由32位计算机的地址空间强加的。
9.如果你正使用复制,当主服务器被关闭且重启动之时,主服务器的memory表变空。可是从服务器意识不到这些表已经变空,所以如果你从它们选择数据, 它就返回过时的内容。自从服务器启动后,当一个memory表在主服务器上第一次被使用之时,一个delete from语句被自动写进主服务器的二进制日志,因此再次让从服务器与主服务器同步。注意,即使使用这个策略,在主服务器的重启和它第一次使用该表之间的间 隔中,从服务器仍旧在表中有过时数据。可是,如果你使用--init-file选项于主服务器启动之时在其上推行memory表。它确保这个时间间隔为 零。