WordPress数据库的清理
这是很奇怪的事情,因为那些不能算是核心功能,本可以交给插件去实现的,现在却因为集成在wp中,容易造成数据库垃圾。
清理插件生成的表格就不消说了,除了下面这几个,其他都不是wp的必需品,可删之。

但除了会生成表格外,很多垃圾其实是长在wp自带的表中的。
这次WordPress的数据库清理,主要是三个表:options、postmeta、posts。
options
options中会留下的垃圾主要是由于插件和模板造成的。
在我用过的插件中,唯一不会留下数据库垃圾的就是postviews。这个插件在卸载时也会自动卸掉自己在数据库中留下的所有印记(要用插件自己的卸载功能,不要直接在FTP中删除插件文件)。
但其他的插件就不是这样了,卸载后仍然会在数据库中留下已经无用的表和字段。
而且,autoload还是yes……
<—以前的插件留下的垃圾模板也是如此,有些模板也会在options中留下记录,判断的标准并不是模板是否有后台选项。有些没有后台选项的模板也会留下垃圾,而有些带有后台选项的模板却是干干净净的。
这方面的判断要靠对wp的熟悉了,或者也有相应插件。
我没用过清理数据库的插件,无法做推荐。
postmeta
主要是附件、插件、帖子编辑产生的字段。而如果这样的字段并非必要,也就成了垃圾。
wp中每上传一个附件都会生成字段(达成附件和帖子的关联),这些可以不去动它。
但实际上,除了用到来显示帖子图片,或者必须和帖子关联才能生成缩略图的插件或模板外,这个关联也没有太大实际意义。

由于以前使用的comfy模板预装了ratings插件,数据库中留下了大量的ratings相关字段,用SQL命令删之。
例如:
DELETE FROM `库名`.`表前缀_postmeta` WHERE `表前缀_postmeta`.`meta_key` = ‘ratings_average’;
另外,postmeta中还可以看到这样的字段:_edit_lock 以及 _edit_last。
这些则是编辑帖子时产生的,目的是锁定正在编辑的帖子,防止不同的用户同时编辑同一个帖。
删掉这些字段的命令和上面的一样。
例如:DELETE FROM `库名`.`表前缀_postmeta`
WHERE `表前缀_postmeta`.`meta_key` = ‘_edit_lock’;
但之后编辑帖子时,又会在每编辑一帖的时候自动新增一批这样的字段。
posts
posts中的垃圾主要是wp的自动保存等功能造成的。
wp2.8中有修订功能,像wiki一样允许将帖子恢复为旧版。
但wp不是wiki,这功能实在没什么必要,反而会加大数据库的读取量。
自动保存也是鸡肋,我用的火狐浏览器,如果需要这样的功能,完全可以用火狐插件或油猴子脚本来实现,根本不需要wp自作主张给我保存。
通过修改wp的php代码可以禁用这些功能,但要删除以前产生的旧版,就需要进数据库。
这一步是几天前就做了的,我已经忘了当时的数据库状况和所用的SQL语句了。
不过,又一个无用字段inherit却是现成的。

很明显,post_status为inherit的内容(post_content)是空的,这又是没意义的垃圾。
删它没商量:
DELETE FROM `数据库名`.`表前缀_posts` WHERE `表前缀_posts`.`post_status` = ‘inherit’;
这一删就是近900行。
终于把posts的行数(550)和wp后台显示的文章数(549+1)统一起来了。

这三个表就清理出了三四兆、一两千行的垃圾数据。
真不愧是自从装了WP以后就没再管过数据库的……
陈年旧评分割线(评论顺序 ↑)
emize_info:马克 藏
TombCrow:wopus.org看到删除修订记录的语句,拷贝到这里汇总~DELETE FROM wp_postmeta WHERE post_id IN (SELECT id FROM wp_posts WHERE post_type = 'revision');DELETE FROM wp_term_relationships WHERE object_id IN (SELECT id FROM wp_posts

