清理 WordPress 数据库冗余数据集合


Mysql 可以说是后端决定速度中最重要的部分,最明显的就是你刚创建博客只有1篇文章的时候和写了1年博客时的加载速度,那真是天壤之别,这就是为什么每次 hello world 都很有快感的原因之一。

虽然有很多清理数据库的插件,但是大发还是喜欢自己使用sql语句定期清理数据库,主要是插件不是所有的表都可以清理,比如 options表,一般插件是无法清理的。数据库的垃圾数据主要存在 wp_posts wp_postmeta wp_commetns wp_commentmetawp_options ,另外百度社会化插件也会额外创建两个表。

注意:以下 sql 语句都是在前缀为 wp 的情况下,如果你有做修改请替换成你自己,另外阿里云 rds 不支持多条语句一次执行,请分步执行。在执行数据操作时一定要备份数据库,以免发生意外。

wp_posts表

删除文章修订版本

DELETE FROM wp_posts  WHERE post_type = 'revision';

wp 媒体管理器上传图片的时候同事会成才 attachment 文章格式,如果你不需要根据这个检索图片的话也可以删掉。

DELETE FROM wp_posts  WHERE post_type = 'attachment';

wp_postmeta表

这里是重灾区,可以执行以下命令

DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';
DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';
DELETE FROM wp_postmeta WHERE meta_key = '_revision-control';
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);
DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';
DELETE FROM wp_postmeta WHERE meta_key = '_revision-control';
DELETE FROM wp_postmeta WHERE meta_value = '{{unknown}}';

如果你不需要管理你的多媒体文件可以使用下面这两句

DELETE FROM wp_postmeta WHERE meta_key = '_wp_attached_file';
DELETE FROM wp_postmeta WHERE meta_key = '_wp_attachment_metadata';

综合到一起可直接执行下面两句

DELETE FROM wp_postmeta WHERE meta_key in ('_edit_lock', '_edit_last', '_wp_old_slug', '_revision-control', '{{unknown}}', '_wp_attached_file', '_wp_attachment_metadata');
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT id FROM wp_posts);

wp_comments表

删除所有垃圾评论

DELETE FROM wp_comments  WHERE comment_type = 'trash';

删除所有待审评论

DELETE FROM wp_comments  WHERE comment_approved = '0';

wp_commentmeta表

一般来说直接删掉这个表就可以了,我是完全不使用这货的,如果你使用了 commentmeta 存储信息请谨慎执行此句

TRUNCATE TABLE `wp_commentmeta`

wp_options表

DELETE FROM wp_options WHERE option_name LIKE '_transient_%';
DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%';

这样会删除所有临时数据,包括未过期的,谨慎使用。


<< WordPress“添加媒体”文件时只显示上传到当前文章的附件图片 wordpress 获取 gravatar 头像函数 get_avatar() >>
  • 作者 建站迷

    建站迷

    让天下没有难做的网站!
    解决中小型企业的无站之伤。



没有账号? 忘记密码?

社交账号快速登录