您好,匿名用户

mysql 无限极分类, cte递归查询

0 投票

首先, 我对数据库没有什么有效的了解
我想在mysql里实现一个分类表, 就像京东淘宝的商品分类, 可以实现无限极分类
需求是:

  • 能直接查询某个节点的所有子节点 (比如要查询某个大类下的所有商品)
  • 能查询两个节点间的路径 (要做面包屑导航)

那如何进行建表? 我进行了搜索
What are the options for storing hierarchical data in a relational database?
这个答案说了很多选择, 我选择了第一种Adjacency List, 即邻接表(其他的搞不懂, 都需要维护额外的字段或者表, 我希望表结构尽可能简单)

同时, 根据
MySQL 8.0 Labs: [Recursive] Common Table Expressions in MySQL (CTEs)
cte递归查询可以满足我的需求

所以我使用了 mysql8 和 cte 来做这件事情
表结构就只有 id, parent_id, name

目前表里有200多个分类, 估计最多不会超过一万条
但是我并不知道 cte 递归查询, 会不会有什么性能上的瓶颈 (对于数据量和请求量上来以后)
所以求建议, 我是维持现有的表结构用 cte 递归就好了, 还是需要修改表结构以便于更快速地读?

用户头像 提问 4 天 @ Poppy 中士 (1,215 威望)
分享到:

1个回答

0 投票
 
最佳答案

递归查询,肯定不建议,特别是数据量大的时候。
那又想要查询时间越快越好,只能采取冗余数据方式。
分类的话。这个结构没必要改了
我举个例子假设有如下分类关系
id name pid
1 手机 0
2 iPhone 1
这时候 商品表可以如下两种设计方式
第一种 path冗余
category_path 1/2 这样比如你查手机大类 只要 Like 1% 就可以了
第二种 中间表关联
假设商品ID 是1
product_id category_id
1 1
1 2
上述两种方法皆可以满足你的需求!

用户头像 回复 4 天 @ Heimerdinger 中士 (1,221 威望)
选中 5月12日 @Poppy
提一个问题:

相关问题

0 投票
0 回复 89 阅读
用户头像 提问 2016年 8月9日 @ Skarner 中士 (1,168 威望)
0 投票
1 回复 60 阅读
0 投票
1 回复 50 阅读
0 投票
1 回复 123 阅读
用户头像 提问 2014年 10月23日 @ Twitch 中士 (1,150 威望)
0 投票
1 回复 229 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...