Answers:
查看http://dev.mysql.com/doc/refman/5.1/en/memory-storage-engine.html上的功能可用性列表,可以跳出两个可能的问题:
除此之外,假设您有足够的RAM,那么基于内存的表应该比基于磁盘的表快。显然,您需要考虑将快照拍摄到磁盘上以解决服务器实例重置时发生的问题,如果数据需要经常捕获(如果您可能会损失一天的时间),则这可能完全抵消总体性能优势。在这种情况下,您每天只能备份一次,但是在大多数情况下是不可接受的)。
一种替代方法可能是:
SELECT * FROM <table> ORDER BY <pkey fields>
然后针对每个表,随后SELECT <indexed fields> FROM <table> ORDER BY <index fields>
针对每个索引这样,所有数据都在RAM中,您只需担心写入操作的I / O性能。如果您的应用程序的通用工作集比整个数据库小(通常是这种情况-在大多数应用程序中,大多数用户只会在最近的时间查看最新数据),所以最好选择更多的数据您可以扫描以将其预加载到内存中,从而允许其余磁盘按需从磁盘加载。
作为记录。我在内存中测试了Mysql表以存储一些信息。而且我测试了PHP的APC(APCu)来存储相同的信息。
适用于58000个注册表。(varchar +整数+日期)。
该表只有一个索引,所以我不认为这是主要因素。
内存表不是“大”表的选项,因为它使用了过多的内存。
"MEMORY tables use a fixed-length row-storage format. Variable-length types such as VARCHAR are stored using a fixed length."
dev.mysql.com/doc/refman/5.6/en/memory-storage-engine.html实际上,VARCHAR在MEMORY引擎中看起来像是CHAR。
根据MySQL和MariaDB手册,MEMORY存储不支持BLOB和CLOB(各种TEXT类型)。出于我们自己的目的,这使MEMORY存储引擎几乎无用。
http://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html
MEMORY表不能包含BLOB或TEXT列。
https://mariadb.com/kb/zh-CN/mariadb/memory-storage-engine/
可变长度类型(如VARCHAR)可以在MEMORY表中使用。MEMORY表不支持BLOB或TEXT列。
当尝试仅将数据库的一部分转换为MEMORY存储时,我发现不支持存储间引擎外键。因此,所有应该包含表外键引用的表(包含BLOB / CLOB)也应该属于非内存存储类型(至少,这会影响InnoDB子表)。