真实修订版数量须查数据库:SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';仅删wp_posts中revision记录不够,还需清理wp_postmeta和wp_term_relationships中的孤儿数据,并执行OPTIMIZE TABLE释放空间。
直接查 revision 数量,别信后台显示
wordpress 后台“工具 → 状态 → 信息”里看到的修订版数量常不准,尤其当插件改过 wp_count_posts() 或缓存未刷新时。真实数据只在数据库里——进 phpmyadmin,选中你的库,在 sql 标签页执行:
select count(*) from wp_posts where post_type = 'revision';如果返回几万甚至十几万,说明已严重堆积。注意把
wp_ 换成你实际的表前缀(比如 myblog_)。
删 revision 主记录必须连带清理关联表
只执行 DELETE FROM wp_posts WHERE post_type = 'revision'; 是半吊子操作:wp_postmeta 里还留着大量孤儿记录(post_id 指向已删的 revision ID),wp_term_relationships 里也可能挂着空关系。这些不清理,表体积根本下不去,后续 OPTIMIZE TABLE 也白搭。
按顺序执行这三句(同样记得换前缀):
DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts p ON pm.post_id = p.ID WHERE p.ID IS NULL;<br>DELETE tr FROM wp_term_relationships tr LEFT JOIN wp_posts p ON tr.object_id = p.ID WHERE p.ID IS NULL;<br>DELETE FROM wp_posts WHERE post_type = 'revision';最后一句放最后,避免中间出错导致关联数据清理不全。
MySQL 8.0+ 报 “safe update mode” 错误怎么办
在 MySQL 8.0 及以上版本,DELETE FROM wp_posts WHERE post_type = 'revision'; 很可能直接报错:ERROR 1175: You are using safe update mode...这不是权限问题,是 MySQL 默认开启了安全更新模式,要求 DELETE/UPDATE 必须带主键条件或 LIMIT。
绕过方法很简单,加个无害的主键条件即可:
DELETE FROM wp_posts WHERE post_type = 'revision' AND ID > 0;或者更明确点:
DELETE FROM wp_posts WHERE post_type = 'revision' AND ID >= 1;这两条语义完全等价,但能骗过 MySQL 的检查机制。别用
LIMIT,它会漏删。
删完不 OPTIMIZE,磁盘空间一分不省
DELETE 只是标记行删除,InnoDB 不会立刻回收物理空间。你清掉 5 万条 revision,phpMyAdmin 里看表大小几乎不变,备份文件照样大——直到执行 OPTIMIZE TABLE。
执行:
OPTIMIZE TABLE wp_posts, wp_postmeta, wp_term_relationships;注意:这个操作会锁表,生产环境建议在低峰期做;如果表特别大(>1GB),MySQL 5.7+ 可能卡住甚至失败,此时应改用
ALTER TABLE ... ENGINE=InnoDB; 替代。
真正容易被忽略的是:wp_postmeta 表里的孤儿记录,哪怕只残留几百条,长期下来也会拖慢 get_post_meta() 查询——因为 WordPress 每次读元数据都得扫全表找匹配,而没清理的孤儿项会让索引失效更明显。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











