SEO 百科

数据库

本页目录

数据库

数据库 是按一定结构组织起来的数据集合,网页程序真正用到的是数据库管理系统,写入、读取与处理数据都由它完成[1]。站长需要认识它,因为文章、评论、分类这些内容都存在里面,页面由程序查询完数据库再拼出来;查询慢一秒,页面就慢一秒。选哪一套数据库、是自建还是买托管,会同时决定维护成本与页面响应时间。

存什么与网页生成的关系

网页上的正文、标题、作者、发布时间、分类、标签、评论、订单和站点设置,通常都放在数据库的表里。

MySQL 官方对关系型数据库的解释是,数据分散存放于一张张独立的表,而不是全部塞进一个大仓库;表与表之间的关系由数据库固定下来,应用读到的数据就不会出现重复、过时或缺失[1]。

一次页面请求会依次经过这几步:

  1. 浏览器或爬虫发出请求;
  2. 网页程序解析请求参数;
  3. 程序向数据库发起查询;
  4. 数据库返回结果行;
  5. 程序把结果套进模板,生成 HTML;
  6. 响应返回给请求方。

命中页面缓存时,第 3 步与第 4 步可以直接跳过。这也是缓存能大幅缩短响应时间的原因。

常见选型与取舍

网页场景里最常见的四套系统,官方对各自的定位写得比较清楚。

系统 定位 典型场景
MySQL 关系型数据库管理系统 通用建站程序
MariaDB 与 MySQL 同源 多数 Linux 发行版默认安装
PostgreSQL 对象关系型数据库管理系统 查询与数据关系复杂的库
Redis 内存里的键值库 缓存、会话、队列

MySQL 官方说它是使用最广的开源 SQL 数据库管理系统,由 Oracle 开发、分发和支持,并以 GPL 许可证发布,可以免费下载和使用[1]。

MariaDB 官方在文档里把 MySQL 称作前身,把两者放在同一段历史里叙述[3]。实际选哪个,往往不取决于偏好,而取决于主机预装了哪一个。WordPress 官方给出的清单是 MySQL 8.0 以上,或 MariaDB 10.11 以上[6]。

PostgreSQL 官方把它定义为对象关系型数据库管理系统,支持复杂查询、外键、触发器与事务完整性,并且因为许可证宽松,可以免费用于任何用途[4]。查询逻辑重、又不想被单一厂商绑住的站点,往往选它。

Redis 官方把用途写成缓存、主库、向量库或自定义数据库[5]。它把数据放在内存里,读写快,常见用法是给页面或查询结果做一层缓存。

第三方排行给出的位置是,2026 年 10 月 MySQL 排第 2,PostgreSQL 排第 4,Redis 排第 8,MariaDB 排第 13[11]。

查询变慢如何拖累抓取

抓取是收录的第一步,百度把收录概括为“从互联网抓取网页、建立索引数据库、将索引库中数据展现给用户”[10]。数据库就在这条链路的前端:查询占用的时间,直接算进页面的首字节时间。

Google 说明,抓取容量上限随站点响应状况升降,响应快时上限升高,变慢或出现服务器错误时上限下降[7]。它给出的两条优化建议也很直白:服务器响应更快,它或许能抓取更多网页;提高网页加载速度,就能间接提高抓取效率[7]。

百度把抓取频次的调整依据写成两项:内容更新频率与服务器压力[9]。

最坏的情况是查询堆积,把服务器拖到返回 5xx。Google 对此给出的应急办法是,暂时返回 503 或 429 让抓取放慢;连续几天返回这类状态码,会导致它永久降低抓取速度,甚至把网址从索引里移除[7]。5xx 这类服务器错误也被单独列为一类抓取问题[8]。

找到慢查询要用慢查询日志。MySQL 官方说明,一条语句执行超过 long_query_time 秒,就会被写进慢查询日志;默认阈值是 10 秒,日志默认关闭;日志内容可以用 mysqldumpslow 汇总[2]。

-- 打开慢查询日志,并把阈值降到 0.5 秒
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 0.5;

拿到慢查询之后的处理顺序,通常是这几步:

  1. 给查询条件用到的字段补上索引;
  2. 减少同一次请求里的查询次数;
  3. 把反复执行的查询结果放进缓存;
  4. 把读多写少的查询交给 Redis 一类内存库处理[5]。

自建与托管的取舍

多数站长不用自己装数据库,主机面板里建一个库、填好账号密码就能用。托管的好处是备份、监控与版本升级都有服务方负责。

自建的好处是参数可调,版本与扩展由自己决定。代价是备份与恢复要自己安排,参数改错会拖慢整站,出问题时还得能看懂查询计划。

数据库与网页程序通常装在同一台机器上,抢内存是常见现象。流量上来之后,把数据库挪到另一台机器,或者直接买云数据库,是常见的下一步。

版本要跟着程序走。WordPress 已经把要求写在清单里,数据库要 MySQL 8.0 以上或 MariaDB 10.11 以上,PHP 要 8.3 以上[6]。

常见误用

一种误用是只凭感觉调优,不打开慢查询日志,也就无从知道是哪几条语句在拖时间[2]。

另一种误用是缓存时间设得过长,内容更新之后页面长时间不刷新,爬虫抓到的一直是旧版本。

还有一种误用是只用 Redis,不做持久化与备份。官方把 Redis 定位成缓存,也可以当主库用[5];选了后者,就得自己把数据落盘与备份安排上。

最后一种误用是以为数据库慢直接导致排名下降。排名由内容与抓取结果决定,数据库只影响服务器能不能稳定、快速地响应[7]。

附录

参见

参考资料

官方(境外)

  1. 《What is MySQL?》,Oracle,MySQL 8.4 参考手册。
  2. 《The Slow Query Log》,Oracle,MySQL 8.4 参考手册。
  3. 《Documentation》,MariaDB Foundation。
  4. 《What Is PostgreSQL?》,PostgreSQL 全球开发组。
  5. 《Welcome to Redis Docs》,Redis。
  6. 《Requirements》,WordPress。
  7. 《面向大型网站所有者的抓取预算管理指南》,Google 搜索中心。
  8. 《HTTP 状态代码以及网络连接错误和 DNS 错误对 Google 搜索有何影响》,Google 搜索中心。

官方(国内)

  1. 《平台工具使用手册(抓取频次)》,百度搜索资源平台,2020-08-14 更新。
  2. 《百度搜索的工作原理》,百度搜索资源平台,2023-12-21 更新。

第三方

  1. 《DB-Engines Ranking》,DB-Engines,2026-10。

外部链接

无。