如何在MySQL中的存储表中清除开销(data_free)?
题
我在MySQL中有一个内存表进行实时聊天(也许这不是最适合此的表类型吗?),每晚删除行以保持聊天日志可管理的原因台面上的开销。但是,由于您无法在内存表上进行优化,因此如何摆脱开销(Data_free
在里面 show table status
)?
解决方案
您如何摆脱开销?
您可以使用内存/堆存储引擎强制表,以通过更改删除行丢失的剩余空间,但不会更改任何内容。例如
ALTER TABLE my_table ENGINE=MEMORY;
它将重写桌子。用报价从 文档:
要释放已删除的行所使用的内存,请使用Alter Table Engine =内存来强制表重建。
编辑
也许这不是最佳的表类型?
在我看来,这听起来不像是内存桌的理想应用 - 总的来说,我认为它是传统引擎。一些经过思考的食物
首先,内存表不能/不使用B树索引(仅哈希索引),因此可以使用索引订购或范围(即<,>操作)的查询来手动/过滤/过滤。
其次,如果您的InnoDB_Buffer_Pool足够大,并且与并发线程更好地工作,则InnoDB表将位于RAM中,因此对于大多数应用程序,它的性能通常比内存表的表现更好,甚至更好。
第三,也许最重要的是,如果您的MySQL已关闭,您将丢失桌子中的所有数据。如果您使用复制,也有表截断的含义。
不隶属于 StackOverflow