Optimize WordPress database remove bloat speed up

每个 WordPress 网站随着时间积累数据库冗余 — 每次保存的文章版本、插件过期临时数据、自动草稿、已删除内容、垃圾评论和孤立的文章元数据。这些冗余不必要地扩大表格大小并减缓数据库查询速度。

本指南介绍如何使用插件和 phpMyAdmin 安全地清理和优化您的 WordPress 数据库,以及如何防止冗余再次积累。

总是先备份:优化数据库之前,先创建备份。虽然下面的方法是安全的,但在进行任何数据库操作前,备份是必要的保险。

WordPress 数据库积累了什么冗余?

类型描述可以删除吗?
文章版本每次编辑文章时保存的副本 — 每篇文章可达几十个是(保留最近3-5个)
自动草稿WordPress 编辑时自动创建的草稿是
已删除的文章/页面仍在回收站中的已删除内容是
垃圾评论标记为垃圾的评论是
已删除的评论仍在回收站中的已删除评论是
过期临时数据存储在 wp_options 中已过期的插件临时缓存是
孤立元数据链接到已删除项目的文章/用户元数据是(先验证)
未使用的插件表已卸载插件留下的表是(先验证)

方法 1 — WP-Optimize 插件(推荐)

WP-Optimize 是最受欢迎的一体化 WordPress 优化插件,拥有超过 100 万个活跃安装。它在一个界面中处理数据库清理、缓存和图片优化。

  1. WordPress 管理后台 → 插件 → 安装插件 → 搜索 WP-Optimize
  2. 安装 → 激活
  3. 转到 WP-Optimize → 数据库
  4. 选择优化 — 至少勾选:
    • 清理所有文章版本
    • 清理所有自动草稿文章
    • 清理所有已删除文章
    • 移除垃圾和已删除评论
    • 移除过期临时数据选项
  5. 点击 运行所有选中的优化
  6. WP-Optimize 显示已删除行数的摘要

自动化:WP-Optimize 包括定时功能。转到 WP-Optimize → 设置 → 日程,配置每周或每月自动清理。

替代方案:Advanced Database Cleaner 插件

如需更精细地控制删除内容,Advanced Database Cleaner 是 WP-Optimize 的绝佳补充。它擅长识别被卸载插件留下的孤立数据库表。

  1. WordPress 管理后台 → 插件 → 安装插件 → 搜索 Advanced Database Cleaner
  2. 安装 → 激活
  3. 导航到 WP 管理 → Advanced DB Cleaner
  4. 在 常规清理 下,检查所有检测到的垃圾项
  5. 在 孤立表 下,识别已删除插件留下的表 — 删除前先验证每个
  6. 为要删除的每个项目点击 删除 或 清理
插件 优势 最适合
WP-Optimize 一体化:数据库 + 缓存 + 图片 大多数希望单一解决方案的网站
Advanced Database Cleaner 详细的孤立表检测 需要精细控制的开发人员
WP-Sweep 轻量级,无销售推送 偏好最小插件占用空间的用户

方法 2 — phpMyAdmin(高级)

如需直接控制数据库,通过 AsiaGB 托管的 DirectAdmin 使用 phpMyAdmin。

通过 phpMyAdmin 优化表

  1. DirectAdmin → 数据库 → phpMyAdmin → 选择您的 WordPress 数据库
  2. 选择所有表(底部的"全选")
  3. 在"对选中项的操作"下拉菜单中,选择优化表
  4. 点击执行 — 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 数据库名称。结果将表从最大到最小排序,显示哪些表的开销最大,最受益于优化。

预期结果

配备 SSD 和 phpMyAdmin 的 WordPress 托管 — 从 500 泰铢/年起

AsiaGB 托管包括 phpMyAdmin、DirectAdmin 和 Softaculous 一键安装 WordPress。SSD 存储和 PHP 8.3 确保开箱即用的快速数据库查询。

查看托管计划 →