WordPress清理数据库冗余数据加速网站运行速度

文章最后更新时间:2025-03-08 23:21:10

wp_commentmeta 用于保存评论的元信息,在将评论放入回收站等操作时会将数据放入此表,Akismet等垃圾评论标识插件也会生成数据到此表。此表不太重要
wp_comments 用于保存评论信息的表
wp_links 用于保存用户输入到Wordpress中的链接(通过Link Manager)的表
wp_options 用于保存Wordpress相关设置、参数的表,里面包括了大量的重要信息(主题和插件的各种参数、设置)
wp_postmeta 用于保存文章的元信息(meta)的表
wp_posts 用于保存你所有的文章相关信息的表,非常的重要。一般它存储的数据是最多的
wp_terms 文章和链接分类以及文章的tag分类可以在表里找到
wp_term_relationships 日志与wp_terms中的类别与标签联合起来共同存储于此表中。类别相关链接也存储在此表中
wp_term_taxonomy 该表对wp_terms表中的条目分类(类别、链接以及标签)进行说明
wp_usermeta 用于保存用户元信息(meta)的表,head的一些丰富元素信息会在此表记录
wp_users 用于保存Wordpress使用者的相关信息的表

提示:清理优化之前请先备份数据库,以防因失误带来的意外情况!只有做好备份工作才可以有备无患。
PS:主要涉及到的几张表:wp_options,wp_posts,wp_postmeta,wp_commentmeta

定期清理 wp_options 数据表

wp_options 这个数据表是wordpress设置的全局数据,主要存储的数据是和WordPress后台的设置对应(如博客名、博客地址、基本设置…等),平常在WordPress控制面板–设置 里进行的设置,都会对应的存储在这里。wp_options表里垃圾残留记录会随着时间慢慢积累直至臃肿庞大致使你的数据库执行效率低下拖慢你整个主机的运行。

造成 wp_options 表数据膨胀的主要原因是

  1. 在使用的过程中会经常安装、停用或者更换插件,或更换使用不同的主题,并且在使用插件和主题的过程中会在数据库 wp_options 表内增加大量的数据,包括一些冗余的垃圾数据(插件、主题在删除之后没有进行清理,造成残留的无用数据)

  2. 占用数据的大户–RSS缓存,后台的数据调用竟然会放到数据库里面。在wp_options表中发现了大量option_name包含“_transient”的数据,那就是WordPress程序中引入RSSFeed后产生的缓存。正常的WordPress使用过程中,会不断产生这些数据,久而久之,就非常之庞大了

清理 wp_options 表的处理方法

禁用RSS缓存:打开根目录 wp-config.php 配置文件里面设置。将下面代码添加上去。

手动清理:进入phpmyadmin或者mysql命令行模式选择对应的数据库,执行下面mysql语句即可:

wp_options 表里的内容,特别是 _transient 、_site开始的都可以删除,这些是控制板订阅缓存(后台首页显示的订阅缓存,居然保存在wp_options表中,数量多体积大)

清理 wp_posts 表(包括删除修订版本、自动草稿的文章数据)

wordpress的文章有好多:wp_posts表中包括文章种类:文章、修订版本、页面、文章的附件、菜单;其中每种文章又会有很多状态:继承、发布、私有、草稿、自动草稿、回收站。

wp_posts的重要字段含义

post_type(文章类型):post 表示为文章,revision 表示为修订版本,page 为页面,attachment 是文章的附件信息,nav_menu_item 是菜单。这里我们需要的是文章、页面、和菜单,除此之外的都可以删除。

post_status(文章状态):inherit 是继承的附件和文章的附带信息,publish 是已经发布、private 是私有的,draft 是草稿,auto-draft 是自动草稿,trash 是在回收站。这里我们需要的是publish的状态的(已经发布的文章、页面和菜单),除此之外的都可以删除。

造成 wp_posts 表中数据冗余原因

(1)在博主写文章的时候,系统会保存很多的中间状态(如修订版本、自动保存等),在文章发布之后其很多的中间状态没有被删除。

(2)点击“写文章”或“新建页面”时产生的,每点击一次就生成一条“自动草稿(auto draft)”的冗余数据。

清理 wp_posts 表的解决办法

进入 phpmyadmin或者mysql命令行模式选择对应的数据库,执行下面mysql语句即可:

-- 删除所有非发布状态帖子信息(只保留已经发布的状态的文章、菜单、页面) DELETE FROM wp_posts WHERE NOT(post_status = 'publish' AND post_type IN('post','nav_menu_item','page'));
-- 删除全部文章修订版本及所对应的关联数据 DELETE a,b,c FROM wp_posts a LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id) WHERE a.post_type = 'revision'; -- 删除自动保存草稿以及修订版本的文章 delete from wp_posts where (post_status='auto-draft' or post_status='inherit') and post_type='post';

清理 wp_postmeta 表

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

造成 wp_postmeta 表中数据冗余原因

  1. 文章被删除之后,其在wp_postmeta中的数据理应被删除,在系统中多数情况是系统自动删除,但是由于人为删除文章,系统不知道被删除,就不会删除wp_postmeta表中的数据,造成冗余。
  2. 很多主题、插件没有做好及时清除的工作。

清理 wp_postmeta 表的解决办法

执行下列相关的MySQL指令则可以清理出无用的数据

--规矩删除(删除文章中不存在文章的元信息) DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts); -- 安全删除(删除_edit_lock和_edit_last条目是安全的) 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 = '_revision-control'; DELETE FROM wp_postmeta WHERE meta_value = '{{unknown}}'; --特殊插件删除(postnav插件会记录每个文章的访问数,如果不需要,可以删除) DELETE FROM wp_postmeta WHERE meta_key = 'views'; -- 删除孤立的文章元信息(当文章的记录删除后,还有日志扩展表postmeta的数据还没有删除,也要人工清理下) DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL -- 删除重复的 meta key 和 value 记录,仅保留最新的一个 DELETE FROM wp_postmeta WHERE meta_id IN ( select * from (select meta_id FROM wp_postmeta pm WHERE meta_id NOT IN (SELECT max(meta_id) FROM wp_postmeta pm2 where pm2.post_id=pm.post_id and pm2.meta_key=pm.meta_key) ) as g1 )
查看更多心仪的内容 按Ctrl+D收藏我们
部分内容来自于网络 如有不妥联系站长删除
墨星博客欢迎前来投稿文章
© 版权声明
THE END
喜欢就支持一下吧
赞赏
评论 抢沙发

请登录后发表评论

    暂无评论内容