我正在使用cron选项卡来删除每小时运行一次的行。对于性能和更少的碎片,什么是最好的方法来做到这一点?
另外,在删除完成后,我应该运行优化表吗?
发布于 2012-04-30 21:33:46
答案将取决于您的数据和您一次要删除多少行。
如果可能,使用单个查询删除行(而不是每行一个查询)。例如:
DELETE FROM my_table WHERE status="rejected"
如果可能,请在WHERE子句中使用索引列。这将帮助它选择需要删除的行,而无需进行完整的表扫描。
如果要删除所有数据,请使用截断表。
如果使用单个查询删除数据会导致性能问题,则可以尝试限制其删除的行数(添加限制子句)并更频繁地运行删除进程。这会使删除的内容随着时间的推移而扩大。
根据文档,如果删除了表的很大一部分,或者对具有可变长度行的表(具有VARCHAR、VARBINARY、BLOB或文本列的表)进行了许多更改,则应该使用优化表。
优化表是非常昂贵的。如果可以的话,尝试删除数据并优化表,每天(晚上)一次。这将限制对用户的任何影响。
https://stackoverflow.com/questions/10393780
复制相似问题