最近有好几个朋友找小V询问wordpress数据库优化,以及删除数据库冗余数据的方法,正好今天周五下午小V也没课就抽时间写一篇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查询进行清理:
1
2
3
|
delete
from
wp_posts
where
(post_status=
'auto-draft'
or
post_status=
'inherit'
)
and
post_type=
'post'
|
以上sql查询是用来删除自动保存草稿以及定修版本的,如果需要删除其他状态的文章可以根据自己要求增加删除或者修改以上sql查询中的字段。
三、wp_postmeta
wp_postmeta表是用来储存文章元信息的,多半是系统或者插件自动生成的,当然在主题使用了自定义字段是数据也是储存在这个表里的。
清理方法:
1、删除文章中不存在文章的元信息。
1
|
DELETE
FROM
wp_postmeta
WHERE
post_id
NOT
IN
(
SELECT
post_id
FROM
wp_posts);
|
2、删除删除_edit_lock以及_edit_last。
1
2
|
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工具上传文件,表中就不会有这些信息。
清理语句:
1
2
|
DELETE
FROM
wp_postmeta
WHERE
meta_key = ‘_wp_attached_file’;
DELETE
FROM
wp_postmeta
WHERE
meta_key = ‘_wp_attachment_metadata’;
|
其他表一般情况下是不会产生冗余数据的,所以不要清理。(PS:数据库操作前请备份好数据库以防万一。)