内存/堆引擎表是否与具有大缓冲池的innodb表数据库具有相同的性能?我通常有2个表--1个带有varchars和几行的innodb和一个紧凑大小的内存表(5行,大多数只是PK和索引的重读读取内容。我最近了解了innodb缓冲区,所以我的表克隆系统过度杀伤和无用或者还是比innodb快吗?
答案 0 :(得分:3)
在内存表中必须更高性能,至少在理论上:在InnoDB中,即使使用大型缓冲池,您也会在缓存中使用基于块的结构,因此某些块只会部分填满,并且这是一个开销。另一个原因是内存表没有行版本或行锁,因此,这将使用更少的内存。但是很高兴:内存中的表仍然没有行级锁定,所以如果你运行大型更新,你可能会发现使用InnoDB更具可扩展性。
因此,总结一下:MEMORY表 - 存储相同数量的数据的内存可能更少,InnoDB - 可能更具可扩展性。
当然,需要根据您的具体情况来衡量一切。
或许如果您需要将数据存储在内存中,请选择内存数据库? (无耻的插头)。
答案 1 :(得分:1)
InnoDB缓冲池的读取速度与内存表一样快。
在某些情况下,内存表甚至可以超出缓冲的InnoDB表,前者也支持Hash indexes,而后者只支持B-Tree索引。根据查询的配置文件,您可以使用哈希表更快地读取。
此外,如果某些查询需要此内存空间,或者数据很少使用,则缓冲的InnoDB表可以从缓冲区中刷新。通过明确地将数据复制到Memory表,您可以保证数据始终在内存中。
我还要提一下,无论缓冲池的大小如何,InnoDB表的更新都需要在某个阶段刷新到磁盘。但我知道这不适用于您的用例。
现在这是理论。只有非常想要读取这些数据时,非常经常需要考虑这些因素。