我发现了一种简单有效的无限级分类技巧

相信大家常常会碰到多级分类的场景,固定几级的分类还好搞,无限级分类就麻烦些了

最原始的无限级分类的做法是做一个分类表和一个叶子表,每一行表示一个分类,带parentId

但如果搜索一个比较上层的分类下的所有叶子表,那就要遍历所有中间分类,并使用IN或者UNION来连接结果,不仅低效,切容易造成溢出

我百度百度搜索一下Sql无限级分类还会有各种黑科技,包括写存储过程,缓存分类树,用非关系型数据库...

 

然而高效的无限级分类其实没那么难

每种分类加一个字段作为标识,假如用Long字段

那么就有8+8+8+8+8+8+8+8位 可以作为分类层级

第一个8位是最顶级,第二个是它的子分类...

例如

0表示电器

01 表示空调   03表示电视机 

016表示变频空调   017表示定频空调   035表示智能电视机   036表示非智能电视机

那么我要搜索所有电器只要搜索 0<=x<1,搜索所有空调只要搜索01<=x<1....

 

看到这里有些老铁会奇怪,不是说无限级分类吗?long只有8位啊!

而有些老铁就机智地想到了字符串,数据库里的字符串是同样可以被B树索引的,而且是无限长的(好吧有限长,但那长度几乎用不完吧)

 

这种技巧经过测试,事实表明字符串索引的性能还是相当好的

 

当然,这种技巧大概有很多人想过了,我应该不是第一个,但突然有灵感,我还是记录下来,请各位大佬指教

转载于:https://my.oschina.net/voidgeek/blog/3101540

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值