总结下wordpress数据库优化

提醒:本文最后更新于 2213 天前,文中所描述的信息可能已发生改变,请仔细核实。

最近发现很多人其实对wordpress数据库优化,蛮感兴趣的,我在这里做下个人总结。这是篇长文章,不喜欢折腾的就别看了。

        在之前的帖子,如最近搞的几个wp优化摘要优化清理WordPress数据库wp_options表等说过了有关的数据库,特别是wp_options的优化,现在讲全面一点,给大家一些个人建议。

(1)wp_commentmeta: 用于保存评论的元信息,在将评论放入回收站等操作时会将数据放入此表,Akismet等垃圾评论标识插件也会生成数据到此表。
(2)wp_comments: 用于保存所有评论信息的表。
(3)wp_links: 用于保存用户的链接表,友情链接。
(4)wp_options: 用于保存Wordpress相关设置、参数的表,里面也包括了主题和插件的各种参数、设置。
(5)wp_postmeta: 用于保存文章的元信息的表。
(6)wp_posts: 用于保存你所有的文章相关信息的表。
(7)wp_terms: 分类目录和分类标签都可以在此表找到。
(8)wp_term_relationships: 此表将wp_terms与日志中的类别与标签做了标记存储于此表中。类别相关链接也存储在此表。
(9)wp_term_taxonomy: 该表对wp_terms表中的分类进行解释,元信息联结。
(10)wp_usermeta : 用于保存用户元信息的表,head的一些丰富元素信息会在此表记录。
(11)wp_users:用于保存Wordpress用户相关信息的表。


首先呢,一个比较重要需要提的是就是在清理前,请先进行数据库备份,谢谢!我不想因为你在参考本帖的时候,导致了一些特别的问题,而带来损失。

好的,大的方面说了,现在一一细分说一下一些比较重要可清理的表先说wp_options优化,最好用Clean Option对一些已经删除的插件的残留信息做处理,还是蛮不错的,详细请看优化清理WordPress数据库wp_options表

另外一些如占用数据的大户–RSS缓存,后台的数据调用缓存,可以通过在wp-config.php里面加入define('MAGPIE_CACHE_ON','0');来禁用这项缓存,禁用的结果就是可能会导致后台速度较慢(不明显)。其次呢,是wp_posts的优化,此表记录诸如文章、修订版本、页面、文章的附件、菜单等。细分的话,还有继承、发布、私有、草稿、自动草稿、回收站等。

冗余原因相信不必过多解释,大家都晓得,我呢,一般是用WP-Optimize来进行优化的。

当然我们也可以用SQL语句来对他优化:

DELETE FROM wp_posts WHERE NOT(post_status = 'publish' AND post_type IN('post','nav_menu_item','page','attachment'));

他会删除所有非发布状态帖子信息。或许呢,在wo-config.php中用define('WP_POST_REVISIONS', false);来禁用修订保存也是个不错选择,但是不推荐。那么清理完wp_posts,我们也应该清清wp_postmeta。嗯,给他洗个澡。

首先呢,删除文章中不存在文章的元信息,SQL用:

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

来进行清理。

接着呢,是删除_edit_lock和_edit_last条目,SQL用:

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 = '_wp_old_slug';
DELETE FROM wp_postmeta WHERE meta_key = 'jd_tweet_this';
DELETE FROM wp_postmeta WHERE meta_key = 'wp_jd_clig';
DELETE FROM wp_postmeta WHERE meta_key = 'wp_jd_target';
DELETE FROM wp_postmeta WHERE meta_key = 'nofollow4post';
DELETE FROM wp_postmeta WHERE meta_key = 'ratings_score';
DELETE FROM wp_postmeta WHERE meta_key = 'ratings_users';
DELETE FROM wp_postmeta WHERE meta_key = 'ratings_average';
DELETE FROM wp_postmeta WHERE meta_key = 'wp_noextrenallinks_mask_links';
DELETE FROM wp_postmeta WHERE meta_key = '_wp_page_template';
DELETE FROM wp_postmeta WHERE meta_key = '_sexybookmarks_permaHash';
DELETE FROM wp_postmeta WHERE meta_key = '_sexybookmarks_shortUrl';

这上面的就不一一解释了,这些可以考虑清,或者不清,其实很多人或许没这个项目,因为这些大都由插件产生的。

需要单独说的是postnav插件,它会记录每个文章的访问数,如果不需要,可以删除,执行DELETE FROM wp_postmeta WHERE meta_key = 'views';就好了。

我个人在wp_postmeta表中,只留了_wp_attached_file、_wp_attachment_metadata和enclosure。

这些当然也是可以清的,没问题,只是留着比较好,特别是如果你有用WXR备份的话(虽然我不知道有没有影响,但就放过了他)。清除用:

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

就ok了。

如果你比较疯狂的话,直接清空这个表也是没问题,我清了一下,完全正常,清空命令:TRUNCATE TABLE wp_postmeta;这个看个人是否有洁癖了。下面这个,是个非常坑爹的表,wp_commentmeta,特别是你用过诸如Akismet这种评论标识插件,它把大量无用的垃圾信息保存在这个表,而这些信息对我们来说,没啥用处,最多就是偶尔YY一下说,有这么多广告看中我这个宝地,来我这儿发广告。个人觉得这种YY没有意义,特别是我,用了本人自制的更新:防机器人评论勾选这个东东,更没必要了,垃圾评论很少见的。根本不用用到像Akismet这类插件,但因为以前用过1个月左右,这个表也生成了不少垃圾。

正常清理的可以用:

DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments);
DELETE FROM wp_commentmeta WHERE meta_key REGEXP 'akismet';
DELETE FROM wp_commentmeta WHERE meta_key LIKE '%trash%';

我呢,是直接TRUNCATE TABLE wp_commentmeta;进行清空处理。至于wp_comments的话,可以考虑用WP-Optimize来优化或其他此类插件处理一下会更好一些,SQL我只想到了:

DELETE FROM wp_comments WHERE comment_approved = 'trash';

来清理这个不需要的条目。ok,做完这些就基本上ok,数据库可以说没什么可减的了,当然啦,由于上面的命令大多数是DELETE命令,这些命令在删除后,还是保留在数据库里面只是不显示,你可以在PHPMyAdmin中看到表的最后信息,写着多余多少空间,这就是可以优化的,所以最后做完上述所有优化后,我们需要执行

OPTIMIZE TABLE wp_commentmeta;
OPTIMIZE TABLE wp_comments;
OPTIMIZE TABLE wp_links;
OPTIMIZE TABLE wp_options;
OPTIMIZE TABLE wp_postmeta;
OPTIMIZE TABLE wp_posts;
OPTIMIZE TABLE wp_terms;
OPTIMIZE TABLE wp_term_relationships;
OPTIMIZE TABLE wp_term_taxonomy;
OPTIMIZE TABLE wp_usermeta;
OPTIMIZE TABLE wp_users;

来永久删除。


感谢那些有耐心读完此篇文章的人,我觉得比较鼓舞。

呵呵,最后,为懒人们,准备了个php文件,给你们优化用,并且保证是安全的。不过清理的可以说并不多,只是一些绝对可删的基本命令。这样你们就不眼红了。

<?php
$hostname_blog = "localhost";//设定数据库地址地址,一般为localhost
$database_blog = "wordpress";//设定数据库名
$username_blog = "username";//设定数据库用户名
$password_blog = "password";//设定数据库密码
$blog = mysql_pconnect($hostname_blog, $username_blog, $password_blog) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_blog, $blog);
mysql_query('DELETE FROM wp_posts WHERE post_type = "revision"');
mysql_query('DELETE FROM wp_postmeta WHERE meta_key = "_edit_lock"');
mysql_query('DELETE FROM wp_postmeta WHERE meta_key = "_edit_last"');
mysql_query('DELETE FROM wp_commentmeta WHERE meta_key LIKE "%trash%"');
mysql_query('DELETE FROM wp_comments WHERE comment_approved = "trash"');
mysql_query('DELETE FROM wp_options WHERE option_name REGEXP "_transient_"');
$tablelist = mysql_query("SHOW TABLES");
while($checklist = mysql_fetch_array($tablelist)) {
      $optimization=mysql_query("OPTIMIZE TABLE `$checklist[0]`");
}echo 'Done';
?>

转载请注明转自:kn007的个人博客的《总结下wordpress数据库优化