VP导航 VP导航
首页 提交网址

资讯文章 资讯 · NEWS

分类树别只存个 parent_id:邻接表、路径枚举和闭包表的选择题

2026-10-23 约 876 字 预计阅读 2 分钟 yiyunkj

分类树别只存个 parent_id:邻接表、路径枚举和闭包表的选择题 分

目录站的分类几乎都会长成树:大类套小类,小类再套子类。建表时人人都会写一个 parent_id 字段,然后问题就来了——面包屑要一层层往上查,某大类下到底有多少条目要一层层往下算。分类到三四层、总量上千之后,这些查询会越来越难受。

分类树三种数据库模型的对比

图片来源:网络,版权归原作者所有,侵权请联系删除

先看三种模型各长什么样

模型存什么强项弱项
邻接表每行一个 parent_id写入和移动最简单查祖先/后代要递归
路径枚举每行存完整路径串面包屑一次查出移动子树要批量改路径
闭包表单独一张祖先-后代表任意层级查询一步到位存储膨胀,维护成本高

邻接表没有那么不堪

很多人以为邻接表查不了树,其实是老数据库不支持递归查询留下的旧印象。MySQL 8.0 起有了递归 CTE,用一条 WITH RECURSIVE 就能把整棵子树或祖先链查出来,外加索引配合,几千个分类的规模毫无压力。

所以结论的前半句是:还在用 5.7 及以下的站,先升级数据库,比急着改表结构划算。

什么时候值得上路径枚举或闭包表

两个信号。一是面包屑和子树统计成了高频查询——每个页面都渲染面包屑、首页要展示每个大类下的条目总数,这类「读多写少」的场景,路径枚举一行数据就能出结果,不用递归。二是分类树经常整体挪动——运营调整时把一整个子类连同孙类挂到别的大类下,闭包表虽然写入时要多维护一张表,但挪动逻辑写对之后,查询侧永远是一步到位。

路径枚举有个经典陷阱要说清:路径串是靠分隔符拼的,查询时用「前缀匹配 + 分隔符结尾」的条件,别直接 LIKE 前缀。'1/2' 和 '1/23' 前缀相同但完全是两条路,这种错在数据量上来后才暴露。

给目录站的落地建议

三步走:起步用邻接表加递归 CTE,把「分类路径」做成一个查询函数;面包屑出现在所有页面的,把路径冗余成字段或缓存;分类树有频繁搬动需求、且层级深过四层的,再考虑闭包表。

模型的升级成本远低于数据错误的修复成本。换模型前先写好迁移脚本的双向校验:新旧模型各自查一遍所有分类的祖先链,结果不一致的行一条都不能放过。

最后一个字段别忘:sort。同级的展示顺序总要有个依据,等运营提需求的时候再加,就得给全表补值了。

本文标签 分类树 数据库设计 目录站结构
← 上一篇 站点名带 emoji 和生僻字:目录站字符集的四个坑 下一篇 → 站内搜索还在 LIKE '%关键词%':什么时候该换

— 本文完 —

提交网址

发现好站,欢迎自荐收录

站内搜索

站点统计

  • 今日审核0
  • 已收录站点3744
  • 正常访问3737
  • 失联站点7
  • 累计访问174

网站分类

  • AI工具 0
    AI对话0 AI绘画0 AI写作0 AI编程0 AI音视频0 AI办公效率0
  • 开发编程 0
    前端开发0 后端开发0 移动开发0 开源与代码托管0 数据库0 开发文档与教程0
  • 设计素材 0
    UI设计0 图标素材0 免费图库0 字体下载0 配色工具0 设计模板0
  • 站长工具 0
    网站统计0 SEO工具0 域名与主机0 收录提交0 建站程序0 运维监控0
  • 学习教育 0
    编程教程0 语言学习0 职业技能0 公开课与慕课0 考试题库0 中小学教育0
  • 生活服务 0
    交通出行0 外卖点餐0 房产租房0 医疗健康0 政务办事0 快递物流0
  • 影音娱乐 0
    影视观看0 音乐音频0 游戏资源0 短视频直播0 小说阅读0
  • 电商购物 0
    综合商城0 比价工具0 导购返利0 二手交易0 团购优惠0
  • 综合其他 1
    实用工具0 资源合集0 小众站点0 个人博客0 论坛社区0
  • 新闻资讯 0
    科技资讯8 财经媒体1 行业动态0 社会热点0 综合门户0
  • 资讯文章 240

最新收录

  • 中关村在线
  • 幕布
  • 石墨文档
  • Excalidraw
  • 雷锋网
  • 资讯放子域还是子目录:目录站分家的账
  • 把提交指南写成一篇文章:它既是垃圾过
  • 条目数据被竞品整站扒走:识别、防采集

浏览排行

  1. 满分作文网 6
  2. Let's Enhance 3
  3. 淘菜菜 3
  4. MasterClass 3
  5. TypeScript 中文网 3
  6. Zhengziying 3
  7. 得意生活 3
  8. 镇江网友之家 3

联系我们

bQ:12345678

电话:400-8888-888

邮箱:admin@example.com

时间:09:00-21:00

友情链接

车机屋·焊锡条·探兔AI导航·静电测试仪·大学生联盟

关于我们|广告合作|隐私条款|网站地图

原ICP备00000000号-1,@2026

由 Z-BlogPHP 驱动