每个 WordPress 网站随着时间积累数据库冗余 — 每次保存的文章版本、插件过期临时数据、自动草稿、已删除内容、垃圾评论和孤立的文章元数据。这些冗余不必要地扩大表格大小并减缓数据库查询速度。
本指南介绍如何使用插件和 phpMyAdmin 安全地清理和优化您的 WordPress 数据库,以及如何防止冗余再次积累。
总是先备份:优化数据库之前,先创建备份。虽然下面的方法是安全的,但在进行任何数据库操作前,备份是必要的保险。
WordPress 数据库积累了什么冗余?
| 类型 | 描述 | 可以删除吗? |
|---|---|---|
| 文章版本 | 每次编辑文章时保存的副本 — 每篇文章可达几十个 | 是(保留最近3-5个) |
| 自动草稿 | WordPress 编辑时自动创建的草稿 | 是 |
| 已删除的文章/页面 | 仍在回收站中的已删除内容 | 是 |
| 垃圾评论 | 标记为垃圾的评论 | 是 |
| 已删除的评论 | 仍在回收站中的已删除评论 | 是 |
| 过期临时数据 | 存储在 wp_options 中已过期的插件临时缓存 | 是 |
| 孤立元数据 | 链接到已删除项目的文章/用户元数据 | 是(先验证) |
| 未使用的插件表 | 已卸载插件留下的表 | 是(先验证) |
方法 1 — WP-Optimize 插件(推荐)
WP-Optimize 是最受欢迎的一体化 WordPress 优化插件,拥有超过 100 万个活跃安装。它在一个界面中处理数据库清理、缓存和图片优化。
- WordPress 管理后台 → 插件 → 安装插件 → 搜索 WP-Optimize
- 安装 → 激活
- 转到 WP-Optimize → 数据库
- 选择优化 — 至少勾选:
- 清理所有文章版本
- 清理所有自动草稿文章
- 清理所有已删除文章
- 移除垃圾和已删除评论
- 移除过期临时数据选项
- 点击 运行所有选中的优化
- WP-Optimize 显示已删除行数的摘要
自动化:WP-Optimize 包括定时功能。转到 WP-Optimize → 设置 → 日程,配置每周或每月自动清理。
替代方案:Advanced Database Cleaner 插件
如需更精细地控制删除内容,Advanced Database Cleaner 是 WP-Optimize 的绝佳补充。它擅长识别被卸载插件留下的孤立数据库表。
- WordPress 管理后台 → 插件 → 安装插件 → 搜索 Advanced Database Cleaner
- 安装 → 激活
- 导航到 WP 管理 → Advanced DB Cleaner
- 在 常规清理 下,检查所有检测到的垃圾项
- 在 孤立表 下,识别已删除插件留下的表 — 删除前先验证每个
- 为要删除的每个项目点击 删除 或 清理
| 插件 | 优势 | 最适合 |
|---|---|---|
| WP-Optimize | 一体化:数据库 + 缓存 + 图片 | 大多数希望单一解决方案的网站 |
| Advanced Database Cleaner | 详细的孤立表检测 | 需要精细控制的开发人员 |
| WP-Sweep | 轻量级,无销售推送 | 偏好最小插件占用空间的用户 |
方法 2 — phpMyAdmin(高级)
如需直接控制数据库,通过 AsiaGB 托管的 DirectAdmin 使用 phpMyAdmin。
通过 phpMyAdmin 优化表
- DirectAdmin → 数据库 → phpMyAdmin → 选择您的 WordPress 数据库
- 选择所有表(底部的"全选")
- 在"对选中项的操作"下拉菜单中,选择优化表
- 点击执行 — phpMyAdmin 对所有表进行碎片整理和优化
用 SQL 查询删除冗余
为获更精细控制,在 phpMyAdmin 中运行这些查询(如有不同,将 wp_ 替换为您的表前缀):
-- 删除所有文章版本
DELETE FROM wp_posts WHERE post_type = 'revision';
-- 删除自动草稿
DELETE FROM wp_posts WHERE post_status = 'auto-draft';
-- 删除已删除文章
DELETE FROM wp_posts WHERE post_status = 'trash';
-- 删除垃圾评论
DELETE FROM wp_comments WHERE comment_approved = 'spam';
-- 删除过期临时数据
DELETE FROM wp_options WHERE option_name LIKE '_transient_%'
AND option_name NOT LIKE '_transient_timeout_%';
-- 删除孤立的文章元数据
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL;
警告:手动运行 SQL 查询之前始终备份。错误的查询可能会永久删除重要数据,无法恢复。
限制今后的文章版本
清理后,通过限制 WordPress 保留的版本数量来防止未来冗余。将以下内容添加到 wp-config.php:
// 每篇文章只保留最近 3 个版本
define('WP_POST_REVISIONS', 3);
// 完全禁用版本(不建议多作者网站使用)
// define('WP_POST_REVISIONS', false);
其他 wp-config.php 设置以减少长期冗余
除了限制文章版本外,其他几个 wp-config.php 常量有助于长期保持数据库精简:
// 每篇文章只保留最近 3 个版本
define('WP_POST_REVISIONS', 3);
// 将自动保存频率从 60 秒减少到 5 分钟
define('AUTOSAVE_INTERVAL', 300);
// 在 14 天后自动清空回收站(默认为 30 天)
define('EMPTY_TRASH_DAYS', 14);
注意:增加 AUTOSAVE_INTERVAL 会减少自动草稿创建,但如果浏览器崩溃,您可能会丢失更多内容。选择适合您编辑工作流的值。
监测数据库大小的变化
清理后,定期跟踪数据库大小以了解下次清理何时进行。有几种监测方式:
通过 phpMyAdmin
打开 phpMyAdmin → 选择您的 WordPress 数据库 → 页脚行显示"数据"和"索引"列的总大小。查找状态列中的非零"开销"值 — 这表示会受益于优化的表。
通过 WP-Optimize 仪表板
WP-Optimize 在其仪表板标签中显示运行中的数据库大小图表,提供清晰的趋势视图,无需打开 phpMyAdmin。
用于检查表大小的 SQL 查询
SELECT table_name,
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS size_mb,
ROUND((data_free / 1024 / 1024), 2) AS overhead_mb
FROM information_schema.TABLES
WHERE table_schema = 'your_database_name'
ORDER BY size_mb DESC;
将 your_database_name 替换为您的 WordPress 数据库名称。结果将表从最大到最小排序,显示哪些表的开销最大,最受益于优化。
预期结果
- 数据库大小减少 20–60%(取决于积累的冗余)
wp_options查询更快(过期临时数据是主要原因)- WordPress 管理仪表板加载更快
- 减少托管计划的磁盘使用量
配备 SSD 和 phpMyAdmin 的 WordPress 托管 — 从 500 泰铢/年起
AsiaGB 托管包括 phpMyAdmin、DirectAdmin 和 Softaculous 一键安装 WordPress。SSD 存储和 PHP 8.3 确保开箱即用的快速数据库查询。
查看托管计划 →