gpt4 book ai didi

mysql - 你如何清除 MySQL 中 MEMORY 表中的开销 (Data_free)?

转载 作者:可可西里 更新时间:2023-11-01 07:33:42 25 4
gpt4 key购买 nike

我在 MySQL 中有一个 MEMORY 表用于实时聊天(也许这不是最好的表类型?),并且每晚删除行以保持聊天日志的可管理性导致表中的开销。但是,由于您不能在 MEMORY 表上运行 OPTIMIZE,您如何摆脱开销(show table status 中的 Data_free)?

最佳答案

how do you get rid of the overhead?

您可以强制使用 MEMORY/HEAP 存储引擎的表通过更改它来恢复从已删除行中丢失的剩余空间,但不更改任何内容。例如

ALTER TABLE my_table ENGINE=MEMORY;

它将重新写入表格。用 documentation 中的引述来支持这一点:

To free up the memory used by rows that have been deleted, use ALTER TABLE ENGINE=MEMORY to force a table rebuild.

编辑

maybe this isn't the best table type for this?

在我看来,这听起来不像是 MEMORY 表的理想应用——总的来说,我认为它是一个遗留引擎。一些精神食粮

首先,MEMORY 表不能/不使用 b-tree 索引(仅哈希索引),因此可以使用索引进行排序或范围(即 <, > 操作)的查询求助于手动排序/过滤/详尽的。

其次,如果您的 innodb_buffer_pool 足够大,Innodb 表将驻留在 RAM 中,并且可以更好地处理并发线程,因此对于大多数应用程序来说,它的性能通常与 MEMORY 表一样好,甚至更好。

第三,也许最重要的是,如果您的 MySQL 被关闭,您将丢失表中的所有数据。如果您使用复制,也会有表截断的影响。

关于mysql - 你如何清除 MySQL 中 MEMORY 表中的开销 (Data_free)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4575035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com