我正在使用设置为每小时运行的 cron 选项卡删除行。为了提高性能和减少碎片,最好的方法是什么?
另外,我应该在删除完成后运行优化表吗?
答案将取决于您的数据以及一次删除的行数。
如果可能,使用单个查询删除行(而不是每行一个查询)。例如:
DELETE FROM my_table WHERE status="rejected"
如果可能,请在 WHERE 子句中使用索引列。这将帮助它在不进行全表扫描的情况下选择需要删除的行。
如果要删除所有数据,请使用 TRUNCATE TABLE。
如果使用单个查询删除数据会导致性能问题,您可以尝试限制它删除的行数(通过添加 LIMIT 子句)并更频繁地运行删除过程。这将随着时间的推移分散删除。
根据文档,如果您删除了表的大部分或对具有可变长度行的表(具有 VARCHAR、VARBINARY、BLOB 或 TEXT 列的表)进行了许多更改,则应使用 OPTIMIZE TABLE。
优化表可能非常昂贵。如果可以,请尝试每天(晚上)删除数据并优化表格一次。这将限制对您的用户的任何影响。