信科网络 · 11 年只做 WordPress | 建站 / 主题 / 插件 / 商城 / 迁移 / 托管 | 累计服务 3000+ 企业 | 源码全交付
服务热线:13280692153 邮箱:web@wordpressx.com
工作日 08:30-18:0013280692153 免费诊断
首页/数据库优化与冗余清理
DATABASE CLEANUP & OPTIMIZATION

数据库优化与冗余清理
先看 wp_options,再看修订版本

两百个页面的企业站,数据库导出却有 300MB,后台每点一下等三秒——九成不是主机性能不够,而是数据库里堆了几年没人清的垃圾。这一页讲清冗余从哪来、怎么用 SQL 量出来、哪些能直接删、哪些删了会出事。

电话咨询 13280692153 提交需求

11 年WordPress 深耕
3000+服务企业
50%+常见可压缩体积
100%源码交付

WHERE THE BLOAT COMES FROM

数据库是怎么胖起来的
六种垃圾,五种没人管

WordPress 的设计偏保守:几乎不主动删数据。文章改十次留十个版本,删掉的插件留下的选项永远躺在表里,连回收站里的东西都默认保留三十天。这种”什么都不丢”的策略在内容站是优点,在企业站就是负担。

01

修订版本 post revisions

每次点”保存草稿”或自动保存都会写一条 post_type='revision' 的记录,同时往 wp_postmeta 写一份字段。一篇反复修改的产品页留下几十个版本很常见,占用的体积往往是正文的十倍以上。这是企业站最肥的一块。

  • 默认数量不限,WordPress 会一直存
  • 删除修订不影响已发布内容
02

自动草稿与回收站

post_status='auto-draft' 是编辑器打开就生成、从没保存过的空记录,一个站几百条很平常。回收站内容默认保留 30 天,长期不管就是几百条待删记录占着表。

03

孤立元数据 orphaned meta

文章或用户被删掉后,wp_postmeta、wp_usermeta、wp_term_relationships 里对应的记录不一定跟着删。装了又删的插件尤其容易留下大批无主 meta,查询时全表扫描。

04

过期 transient

wp_options 里 _transient_ 与 _transient_timeout_ 成对出现。SEO 插件、汇率、天气、社交计数都会写。正常会自己过期,但插件停用后没人来清,几千条过期记录就那么留着,还会被 autoload 一起加载。

05

垃圾评论与 pingback

没装防垃圾评论的站,wp_comments 里几万条 spam 是常态,每条还带 meta。这类表膨胀会直接拖慢后台评论页与前台评论查询。外贸站尤其明显,因为暴露在公网且常年有爬虫扫表单。

06

wp_options 的 autoload 堆积

这是最容易被低估的一项。autoload 的选项会在每次请求时被一次性读进内存,theme_mods、构建器的全局设置、插件的 license 缓存全在里面。几百 KB 乘以每天的请求数,就是实打实的损耗。

MEASURE FIRST

动手之前先量一遍
四条 SQL 看清家底

清理最忌讳凭感觉删。下面几条查询在 phpMyAdmin 或 Adminer 里直接跑,只读不写,跑完你就知道该从哪下手。执行前请先确认表前缀,示例里用的是默认的 wp_。

A

哪张表最占地方

查 information_schema.tables,按数据加索引的总体积倒序排,取前十五张。正常的站 wp_posts 与 wp_postmeta 应该排在前两位,如果 wp_options 挤进前三,说明 autoload 或 transient 出了问题。

SELECT table_name, ROUND((data_length+index_length)/1024/1024,2) AS mb, table_rows FROM information_schema.tables WHERE table_schema=DATABASE() ORDER BY mb DESC LIMIT 15;

  • 字段用 data_length 加 index_length 求和
  • table_rows 是估算值,会有偏差,看趋势不看绝对值
B

autoload 到底多大

对 wp_options 中 autoload='yes' 的行求 LENGTH(option_value) 之和。经验值是 300KB 以内算健康,超过 800KB 就该排查,超过 2MB 会明显拖慢每一次请求。再按长度倒序列出前二十条,通常一眼就能看出是哪个插件写的。

SELECT ROUND(SUM(LENGTH(option_value))/1024,1) AS autoload_kb FROM wp_options WHERE autoload='yes';

C

修订版本有多少

统计 post_type='revision' 的记录数,再和正式文章数对比。比例超过 10:1 就属于异常。同时统计 auto-draft 与 trash 的数量,这三类可以放在一起看。

SELECT post_type, post_status, COUNT(*) FROM wp_posts GROUP BY post_type, post_status ORDER BY 3 DESC;

  • 修订记录本身不含附件,删了不会掉图
  • 但删之前务必确认没有插件依赖修订做版本对比
D

孤儿数据有多少

用子查询比对 wp_postmeta.post_id 与 wp_posts.ID,能查出没有归属的 meta 条数。同理查 wp_term_relationships 里指向已删文章的记录。这两类数据不占最大体积,但会让 JOIN 变慢。

SELECT COUNT(*) FROM wp_postmeta pm LEFT JOIN wp_posts p ON p.ID=pm.post_id WHERE p.ID IS NULL;

清理前把结果截图存档。前后各存一份,能直观看出效果,出问题时也能快速判断是不是清理引起的。

CLEANUP PLAYBOOK

分四步清理
从最安全的开始

顺序很重要:先停掉产生垃圾的源头,再删存量,最后整理表空间。反过来做,删完第二天又长回来。

01

先设上限,止住增量

在 wp-config.php 里加 define('WP_POST_REVISIONS', 5); 限制每篇最多留五个版本,加 define('EMPTY_TRASH_DAYS', 7); 把回收站保留期缩到 7 天。这两行写进去,增量就被控住了。

02

删修订、草稿、回收站

SQL 层面先删 meta 再删主表:DELETE pm FROM wp_postmeta pm JOIN wp_posts p ON p.ID=pm.post_id WHERE p.post_type='revision';,之后才执行 DELETE FROM wp_posts WHERE post_type='revision';。顺序反了会留下大批孤儿 meta。用 WP-CLI 更稳:wp post delete $(wp post list --post_type=revision --format=ids) --force,它会连带清理关联数据。

03

清 transient 与孤儿 meta

删 option_name LIKE '_transient_%' 与 '_transient_timeout_%' 的记录,注意别误删 _site_transient_ 里的必要项。语句形如 DELETE FROM wp_options WHERE option_name LIKE '_transient_%';,下划线要转义,否则会连带匹配到别的名字。孤儿 meta 用 NOT IN 子查询删除,一次别超过五千条,分批跑避免锁表。

04

重建表空间

DELETE 只是把行标记为可复用,文件不会变小。执行 OPTIMIZE TABLE wp_posts, wp_postmeta, wp_options; 才会真正回收。InnoDB 需要 innodb_file_per_table=ON 才能把空间还给磁盘,共享表空间下只能整理碎片。

卡在”Table is marked as crashed and should be repaired”的,先 REPAIR TABLE 再谈优化。出现 MySQL server has gone away,多半是单条语句影响行数太多,加 LIMIT 分批处理。完整处理路径见WordPress 数据库报错处理。

THE WP_OPTIONS PROBLEM

wp_options 专项
表不大,伤害最大

这张表通常只有几 MB,却是全站最热的一张表——每个请求都要读它。它的膨胀不会让数据库变大,只会让每个页面慢几十到几百毫秒。

01

先分清哪三类选项

一是核心必需项(siteurl、home、active_plugins、rewrite_rules),绝对不能碰;二是插件配置项,量小但值大;三是临时缓存项,包括 transient、rss_ 开头的订阅缓存、_wc_session_ 之类的会话数据。要清理的只有第三类。

02

rewrite_rules 可能非常大

装了多语言、商城、多分类的站,这一条 option 能到几百 KB,而且它是 autoload 的。它不能删,但要确认没被写坏。发现几条同名 option 反复出现,说明有插件每次请求都写库,属于代码问题。

03

把不必要的东西踢出 autoload

插件停用后,它留下的 option 往往还是 autoload=’yes’。可以执行更新语句把这些没人读的项改成 autoload='no',改动可逆、风险低。改完刷新一次前台,再量一遍 autoload 体积,通常能看到明显下降。

04

别用”一键优化”插件全选

WP-Optimize、Sweeper 这类工具很方便,但默认勾选里可能有”删除所有 transient”或”清理未使用的表”。前者让缓存瞬间失效、流量全打到数据库,后者可能删掉别的程序共用的表。执行前逐项看清。

一个实用的习惯:每次停用或卸载插件后,立刻跑一次 autoload 体积查询。装了删、删了装是常态,留下几百条垃圾选项自己不会消失。这条习惯坚持一年,能省掉一次”网站莫名其妙变慢”的排查。

CLEANUP MATRIX

七类冗余逐项对照
能删什么,代价是什么

“保留建议”一列是我们给客户的默认配置,可按站点实际情况调整。

冗余类型 所在表 典型占比 处理方式 风险
文章修订 wp_posts / wp_postmeta 30%-60% 保留最近 5 个,其余删除 低,失去历史版本对比
自动草稿 wp_posts 5%-15% 全部删除 极低
回收站内容 wp_posts 5%-10% 保留 7 天后清理 低,误删无法找回
过期 transient wp_options 10%-25% 按前缀删除 中,缓存需重新生成
垃圾评论 wp_comments 视站而定 标记 spam 后批量删 低,注意别误删真实询盘
孤儿 meta wp_postmeta / wp_usermeta 5%-20% NOT IN 子查询分批删 中,子查询写错会误删
表碎片 全部 InnoDB 表 10%-30% OPTIMIZE TABLE 中,执行期间锁表

体积下降通常在三到六成,具体取决于站点历史。真正影响前台速度的往往不是体积,而是查询次数与 autoload 大小,清理之后要配合缓存层看效果。做法见WordPress 速度优化。

FAQ

数据库清理常见五问

删修订版本会不会把文章内容弄丢?

不会。修订是独立记录,文章的当前内容存在另一条记录里。删掉只失去”回看历史版本”的能力,不影响前台。例外是有插件把数据只存在修订里,少见但存在,所以第一次清理前一定要有可用的数据库备份。

清理之后数据库文件为什么没变小?

DELETE 只是把行标记为可复用,InnoDB 文件不会自动收缩。要让磁盘空间真正释放,需要 OPTIMIZE TABLE 重建表,并确认 innodb_file_per_table 已开启。即使不重建,释放的空间也会被后续插入复用,性能改善往往在 OPTIMIZE 之前就出现了。

用插件一键优化安全吗?

工具没问题,问题在默认勾选。常见三个坑:清空全部 transient 导致缓存雪崩、删掉”未使用的表”误伤其他程序、在业务高峰执行导致锁表超时。低峰期跑,逐项确认,第一次先在测试库试。

多久清理一次比较合适?

更新频繁的站每季度一次,纯展示站每半年一次。另外三个时间点顺手清:迁移之前、大版本升级之前、发现后台明显变慢时。设置了修订上限之后增量很小,不必更频繁。

数据库优化能提升多少速度?

取决于原来的状态。一个 autoload 超过 2MB 的站,清理后首字节时间下降几百毫秒是常见的;本来就健康的站,提升可能只有几十毫秒。它属于基础卫生,不是性能优化的主力。真正决定速度的是缓存策略、图片体积与服务器线路,这些在WordPress 速度优化里展开。

DATABASE HEALTH CHECK

后台越来越慢,导出越来越大
先做一次体检再决定动不动手

把数据库大小、表清单和主机配置发给我们,可以先出一份只读诊断:哪张表异常、autoload 是否超标、有没有可安全清理的存量。确认之后再排清理窗口,全程有备份兜底。相关阅读:数据库报错处理、备份与恢复、WordPress 托管维护。

电话/微信 13280692153 邮箱 web@wordpressx.com 地址 山东省淄博市张店区电子产业创新园 B 座

INDUSTRIAL BELT

扎根中国制造产业带
懂工厂,才懂出海

从胶东半岛到珠三角,从长三角到中原腹地,每一片产业集群都有自己的出口节奏与买家画像。信科网络长期扎根产业一线,把工厂的产品语言翻译成海外采购商听得懂的搜索语言,让每一分投入都对着真实的询盘去。

xinhua

新华外贸网站建设

新华区隶属于河北省沧州市,地处沧州市区东半部,与运河区以清池大道为界,行政区域总面积88.5平方千米。新华区属暖温带半湿润大陆性季风气候,四季分明,日照充足。截至2014年,新华区下辖5个…

jingxian

景县外贸网站建设

景县位于河北省东南部,大运河西岸,全县辖9镇7乡,849个行政村,总面积1183平方公里。全县呈簸箕形,由西南向东北逐渐倾斜坦,最高点海拔25米,最低点14.1米。属暖温带半湿润大陆性气候,四季…

hengshui

衡水外贸建站

衡水市位于河北省东南部,东与沧州市和山东省德州市毗邻,西与石家庄市接壤,南与邢台市相连,北与保定市交界;南北长125.5公里,东西宽98.13公里,全市辖8县2市1区,总面积5815.4平方公里。衡…

zhongwei

中卫外贸建站

中卫地处黄河前套之首,位于宁夏回族自治区中西部、宁、甘、内蒙古三省区交界点上,辖中宁、海原两县和中卫城区,总面积16986.1平方公里,其中川区面积3681.1平方公里,占21.67%,山区面积1330…

banan

巴南WordPress建站

巴南区的前身是千年历史名邑巴县。早在3000多年前的商代,巴人就在此繁衍生息,立国建都。秦代置巴郡,南朝齐代置垫江县,北周时改称巴县并沿袭至1995年。1995年经国务院批准撤县建区,成立巴…

fuling

涪陵WordPress建站

重庆市涪陵区,邑枕长、乌两江,素为乌江流域物资集散地,有渝东南门户之称,是闻名遐迩的中国“榨菜之乡”。全区幅员面积2946平方公里,辖1个经济技术开发区、1个私营经济示范区和44个乡镇、街…

yuzhong

渝中Shopify建站

渝中区,位于长江上游地区、重庆大都市区,属重庆主城九区之一。地处在长江、嘉陵江交汇地带,由于两江环抱,形似半岛,又名渝中半岛。渝中区作为重庆市政治、经济、文化以及商贸流通中心,别…

tongnan

潼南Shopify建站

潼南县位于重庆市西北部最前沿。是川渝握手区腹地东西南北交通自然便捷走向的交汇点及区域几何中心,是成渝经济区的腹地中心,是重庆西部凸入川中腹地最远、毗邻四川县市最多的对外开放最前沿…

wanzhou

万州外贸推广

重庆市万州区地处三峡库区腹心,长江中上游结合部,因“万川毕汇、万商云集”而得名,是长江十大港口之一。全区幅员面积3457平方公里,辖52个镇乡、街道。总人口171.7万,在重庆40个区县中人口最…

xianxian

献县外贸推广

献县历史悠久,夏商时期属冀州,春秋时属燕国,战国时属燕、赵、秦。早在春秋战国时期。境内就形成了具有一定影响力的城市——乐成。汉高祖六年(公元前201年)置河间郡,汉文帝二年…

jinfeng

金凤Google SEO

金凤区于2002年11月1日成立,是宁夏回族自治区首府银川市的市辖区之一,位于市区中部,东到唐徕渠,西到包兰铁路,南接永宁县,北临贺兰县,辖良田、丰登2个镇,上海西路、北京中路、长城中路…

fucheng

阜城Google SEO

阜城县是河北省衡水市下辖的一个县。面积698平方千米,人口32万。邮政编码053700。阜城县人文荟萃.历史上出现过不少的学者名流,北齐的刘昼,北周的熊安生,民国初期的京剧著名表演艺术家荀慧生,…

yongning

永宁GEO优化

永宁县地处宁夏平原中部,东临黄河,西倚贺兰山,是宁夏回族自治区首府银川市的郊县。全县国土面积1020平方公里,辖五镇一乡一个街道办事处,总人口20.4万人,有汉、回、满等13个民族,其中回…

huinong

惠农GEO优化

塞北明珠——惠农区,地处宁夏回族自治区最北端,东临滔滔黄河,西依巍巍贺兰山,北与内蒙乌海接壤,总面积1088平方公里,人口20.9万。惠农区是2004年2月经国务院批准,撤消原惠农县和石嘴山区而…

wushan

巫山谷歌SEM

巫山位于重庆市东北部,三峡库区腹心,素有“渝东门户”之称,地跨长江巫峡两岸。东邻湖北省巴东县,西接奉节县,南与湖北省建始县毗连,北与巫溪县及神农架林区接壤。县城位于大宁河与长江交汇…

haiyuan

海原谷歌SEM

位于中国宁夏回族自治区中南部。1991年底人口31.15万。回族为主,有汉、满、蒙古、东乡等民族。西汉属安定郡。清同治十三年(1874)设海城县。民国三年(1914)改海原县。地形复杂,多山地。年…

fengjie

奉节Facebook广告

奉节县位于重庆市东部,地处四川盆地东端,地理坐标为东经109°1′17″—109°45′58″,北纬30°29′19″—31°22′33″。县境东邻巫山县,南界湖北省恩施土家族苗族自治州,西连云阳县,北接巫溪县。境内有…

pengyang

彭阳Facebook广告

彭阳县位于宁夏回族自治区,位于宁夏回族自治区南部边缘,六盘山东麓,介于东经106°32′-106°58’之间,北纬35°4l’-36°17’。西连宁夏固原市原州区,东、南、北环临甘肃…

beidaihe

北戴河Yandex推广

北戴河海滨地处河北省秦皇岛市中心的西部。是秦皇岛的城市区之一!受海洋气候的影响,夏无酷暑,冬无严寒,常年保持一级大气质量,没有污染,没有噪音,城市森林覆盖率54%,人均绿地630平方米…

shizhu

石柱Yandex推广

石柱土家族自治县简称石柱县,位于重庆市东部、长江南岸、山峡库区腹心,是集少数民族自治县、三峡库区淹没县、国家扶贫工作重点县于一体的特殊县份。幅员面积3012平方公里,辖32个乡镇,总人…

guyuan

固原TikTok推广

固原地区位于宁夏回族自治区南部,东西南三面与甘肃毗邻,北部与本区中卫、同心两县接壤,总面积16783平方公里,辖固原、海原、西吉、隆德、彭阳、泾源县,总人口186.85万人,其中回族占47.6%,…

为什么一定要选懂产业带的出海服务商?建材丝网的欧洲建筑商看资质与交期,工业橡塑的中东工程商问耐温与工况,毛皮服饰的俄罗斯分销商算的是季节与毛利。买家不同,决策逻辑就不同;信科网络把这些差异拆进网站结构、关键词地图和投放策略里,用他们习惯的方式出现在他们搜索的地方。