user10089632 Asked: 2018-03-01 01:22:28 +0800 CST2018-03-01 01:22:28 +0800 CST 2018-03-01 01:22:28 +0800 CST 内存表有哪些实际用例? 772 尝试学习 mysql 并有大量其他材料要学习,我正在考虑跳过内存表,因为它们有许多需要考虑的特殊特性,尤其是在服务器重启后它们会消失。 在生产环境中,它们的用途是什么? mysql memory-optimized-tables 1 个回答 Voted Best Answer Federico Razzoli 2018-03-01T02:24:36+08:002018-03-01T02:24:36+08:00 如果你正在学习 MySQL,跳过 MEMORY 存储引擎是个不错的主意。InnoDB 是默认的存储引擎,适用于大多数情况。只有在边缘情况下才有意义使用另一个,并且在非常了解 InnoDB 之前您可能不应该考虑这个选项。 但是,要回答您的问题,首先让我们检查一下 MEMORY 的优缺点。 缺点: 您可能会丢失数据(表定义除外)。 没有交易,没有任何形式的一致性。 仅支持HASH索引,因此没有针对WHERE col > n,ORDER BY或之类的查询进行优化GROUP BY。 大量使用会消耗内存。没有简单的方法来监视您为这些表使用了多少内存。 优点: 并不比 InnoDB 快多少(在延迟方面),但如果使用得当,通常仍然更快。 更好的吞吐量,因为您不与存储设备对话。 所以问题就变成了,哪些用例不会因为缺点而受到影响并利用专业人士的优势?好吧,第一个明显的通用答案是,避免所有数据丢失成为问题的用例。更具体地说,您可以考虑将 MEMORY 用于: 缓存:所有查询都是点搜索,数据总是可以重建的。 加快一些大规模插入。您将数据临时放入 MEMORY 表中,进行转换,然后将行复制到“常规”表中。但是如果你的转换需要BTREE索引,这不是一个好的选择。 TEMPORARY表,当你不需要BTREE索引时。
如果你正在学习 MySQL,跳过 MEMORY 存储引擎是个不错的主意。InnoDB 是默认的存储引擎,适用于大多数情况。只有在边缘情况下才有意义使用另一个,并且在非常了解 InnoDB 之前您可能不应该考虑这个选项。
但是,要回答您的问题,首先让我们检查一下 MEMORY 的优缺点。
缺点:
HASH
索引,因此没有针对WHERE col > n
,ORDER BY
或之类的查询进行优化GROUP BY
。优点:
所以问题就变成了,哪些用例不会因为缺点而受到影响并利用专业人士的优势?好吧,第一个明显的通用答案是,避免所有数据丢失成为问题的用例。更具体地说,您可以考虑将 MEMORY 用于:
BTREE
索引,这不是一个好的选择。TEMPORARY
表,当你不需要BTREE
索引时。