kn007的个人博客
♥ You are here: Home > 软件与网络 > php > 总结下wordpress数据库优化

总结下wordpress数据库优化

by | 92 Comments

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

最近发现很多人其实对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数据库优化

donate
有所帮助?

Comments

92 Comments立即评论
  1. 回复

    对数据库一直没敢动过,不懂代码啊,有时间要多学学 :smile:

    1. MOD回复

      @agony: :arrow: 接触了发现也就那么回事~ :razz:

  2. 我就用 WP-Optimize 稍微 优化下了,数据库也不是很大.. :lol:

    1. MOD回复
  3. 对于不懂代码的人来说,真的不敢动数据库啊 :sad:

    1. MOD回复

      @吉他手: 额 :o

    2. @kn007: 哪天不忙了,我来研究研究

    3. MOD回复
  4. 回复

    很有用 谢谢博主~!

    1. MOD回复

      @蛋炒饭: 谢谢夸奖!你的头像挺可爱的 :roll:

  5. 囧,我数据库已经清了20M了,原来30M。。

    1. MOD回复

      @大发: :lol: 我之前没这么变态,17M精简到3M,现在6.5M了。。。主要是评论和文章正文大

    2. @kn007: 主要我评论数太多了。。

    3. MOD回复

      @大发: 同,评论大小是文章正文大小的两倍,估计你不止呢。。。评论主要是UA等信息多

  6. 回复

    效果明显,文件很好用。但是不知道优化了多少容量,只是觉得速度变快了·!

    1. MOD回复

      @自然志: 嘿嘿,谢谢支持!

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif