最近有好几个朋友找小编询问 WordPress 数据库优化,以及删除数据库冗余数据的方法,正好今天周五下午小编也没课就抽时间写一篇 WordPress 数据库结构分析以及优化教程。首先我们要优化 WordPress 的数据库就要了解清楚 WordPress 数据库中每个表的作用。 (PS:下文均以默认数据表前缀 wp_为例,实际运用中请改成你自己数据表额前缀。)

(1)wp_commentmeta: 用于保存评论的元信息,在将评论放入回收站等操作时会将数据放入此表,Akismet 等插件也会生成此表的数据。此表不太重要。

(2)wp_comments: 用于保存评论信息的表。

(3)wp_links: 用于保存用户输入到 WordPress 中的链接 (通过 Link Manager) 的表。

(4)wp_options: 用于保存 WordPress 相关设置、参数的表,里面包括了大量的重要信息。

(5)wp_postmeta: 用于保存文章的元信息 (meta) 的表。此表不太重要。

(6)wp_posts: 用于保存你所有的文章相关信息的表,非常的重要。一般它存储的数据是最多的。

(7)wp_terms: 文章和链接分类以及文章的 tag 分类可以在表里找到。

(8)wp_term_relationships: 日志与 wp_terms 中的类别与标签联合起来共同存储在 wp_terms_relationships 表中。类别相关链接也存储在 wp_terms_relationships 中。

(9)wp_term_taxonomy: 该表格对 wp_terms 表中的条目分类 (类别、链接以及标签) 进行说明。

(10)wp_usermeta : 用于保存用户元信息 (meta) 的表。

(11)wp_users: 用于保存 WordPress 用户信息的表。

一、 wp_options

首先来说下 wp_options 表的清理、优化。首先我们要清楚的是由于 wp_options 表是用于储存 WordPress 系统设置,以及一些插件设置的表,所以一旦错误的删除了一些表可能会造成需要重新登录后台进行设置的情况,严重的时候可能会导致网站无法访问。那么如何安全的清理 wp_options 表呢?如果是比较熟悉 WordPress 数据库结构的老鸟则可以手动删除冗余数据,新人推荐使用 clean options 插件进行清理。

二、 wp_posts

再来说说 wp_posts 表的清理吧,首先要知道 wp_posts 表是 WordPress 用来储存文章数据的表,那么我们在优清理 wp_posts 表时就必须了解 WordPress 中的几种文章状态:

1 、 pending:待审

2 、 draft:草稿

3 、 auto-draft:自动保存的草稿

4 、 inherit:修订版本

5 、 trash:回收站

6 、 publish:已发布

7 、 future:定时

8 、 private:私有

那么了解了 WordPress 文章状态后我们就可以用以下 SQL 查询进行清理:

delete from wp_posts
where (post_status='auto-draft' or post_status='inherit')
and post_type='post'

以上 sql 查询是用来删除自动保存草稿以及定修版本的,如果需要删除其他状态的文章可以根据自己要求增加删除或者修改以上 sql 查询中的字段。

三、 wp_postmeta

wp_postmeta 表是用来储存文章元信息的,多半是系统或者插件自动生成的,当然在主题使用了自定义字段是数据也是储存在这个表里的。

清理方法:

1 、删除文章中不存在文章的元信息。

DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);

2 、删除删除_edit_lock 以及_edit_last 。

DELETE FROM wp_postmeta WHERE meta_key = 『_edit_lock』;
DELETE FROM wp_postmeta WHERE meta_key = 『_edit_last』;

3 、在 WordPress 的后台上传图片或者附件后会在 wp_postmeta 中生成_wp_attached_file 和_wp_attachment_metadata 两个项,wp_posts 也会记录附件的信息。如果使用 FTP 工具上传文件,表中就不会有这些信息。

清理语句:

DELETE FROM wp_postmeta WHERE meta_key = 『_wp_attached_file』;
DELETE FROM wp_postmeta WHERE meta_key = 『_wp_attachment_metadata』;

其他表一般情况下是不会产生冗余数据的,所以不要清理。 (PS:数据库操作前请备份好数据库以防万一。)