我在MySQL中有一个内存表进行实时聊天(也许这不是最适合此的表类型吗?),每晚删除行以保持聊天日志可管理的原因台面上的开销。但是,由于您无法在内存表上进行优化,因此如何摆脱开销(Data_free 在里面 show table status)?

有帮助吗?

解决方案

您如何摆脱开销?

您可以使用内存/堆存储引擎强制表,以通过更改删除行丢失的剩余空间,但不会更改任何内容。例如

ALTER TABLE my_table ENGINE=MEMORY;

它将重写桌子。用报价从 文档:

要释放已删除的行所使用的内存,请使用Alter Table Engine =内存来强制表重建。

编辑

也许这不是最佳的表类型?

在我看来,这听起来不像是内存桌的理想应用 - 总的来说,我认为它是传统引擎。一些经过思考的食物

首先,内存表不能/不使用B树索引(仅哈希索引),因此可以使用索引订购或范围(即<,>操作)的查询来手动/过滤/过滤。

其次,如果您的InnoDB_Buffer_Pool足够大,并且与并发线程更好地工作,则InnoDB表将位于RAM中,因此对于大多数应用程序,它的性能通常比内存表的表现更好,甚至更好。

第三,也许最重要的是,如果您的MySQL已关闭,您将丢失桌子中的所有数据。如果您使用复制,也有表截断的含义。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top