从大型数据库中删除可能是一个常见的问题,虽然我想问的不是如何做到这一点。
从我在网上看到的,从大型数据库中删除的最佳/有效方法是每隔一段时间删除少量数据。在我的情况下,我不能做TRUNCATE
,因为数据是在DB中不断写入的,而我可能会在执行TRUNCATE
时丢失一些,对吧?
从数据库中删除数据时,无论是少量还是大量,都会产生开销,从而降低性能。我可以通过在删除后优化表来处理这个问题。我不知道的是优化是否会导致数据上的任何问题被读取或写入数据库?
我的删除数据的方法可能是错的。如果您有任何建议会有很大帮助。
答案 0 :(得分:1)
也许您应该删除要删除的任何表格并执行以下操作
对于此示例,表mytable
CREATE TABLE newtable LIKE mytable;
ALTER TABLE mytable RENAME oldtable;
ALTER TABLE newtable RENAME mytable;
TRUNCATE TABLE oldtable;
这样,该表可用于编写新数据,您可以花时间同时切换旧表。
答案 1 :(得分:0)
MySQL不会丢失数据。可能发生的是您刚刚删除的数据的查询/更新,但是客户端需要更多详细信息等。有时在大型删除或截断时,您的数据库将在其客户端的调用上超时。客户如何对超时做出反应取决于他们。在这种情况下,您必须检查客户端如何处理该错误。
任何'优化'(你在想什么?)应该在非高峰时段发生。衡量数据库的活动,并查找相对于用户流量模式执行维护(索引,重建统计信息)的最佳时间。考虑正式的计划停机/停机
答案 2 :(得分:0)
我不确定您需要删除哪些大量数据。但是如果它是您需要定期删除的“旧”数据,您可以考虑使用MERGE表。您可以从具有相同结构的任何MyISAM表中创建MERGE表。
例如,您可以为每个日历季度创建一个表。在每个季度结束时,您将创建一个新的空表,并重新声明组成MERGE表的表。所以MERGE表总是有过去几年的数据。如果您的代码始终引用MERGE表,则在“迁移”数据时无需更改任何内容。重新定义MERGE表的UNION表几乎是即时的。
这只是一个例子,但您可以按照自己喜欢的方式分离数据。
http://dev.mysql.com/doc/refman/5.0/en/merge-storage-engine.html