需求大概是这样:根据搜索条件 查询商品列表,每个商品有分类属性,需要根据分类来分组显示,分类下没有商品的分类不展示,因为商品数据量非常庞大,所以一次搜索出来的商品无法展示完全,我采用了分页,根据搜索条件以及每个分类 ID 来分页查商品,因为产品需要只展示有商品的分类,所以在这之前,我的查出来有商品的分类列表给前端。
因搜索条件灵活动态多变,所以这个分类基本无法固定下来,缓存意义也不大。
开始我采用了方案一: sql 查询语句 where 过滤搜索条件,GROUP BY 分类 id ,该加的索引也加上了。 该方案大部分都是正常的,后面有测试给我反馈有些很慢,我排查到是某些店铺商品数量非常多,然后搜索条件又需要筛选辅表关联表,主表:辅表 是 1:n 关系,所以数据量非常庞大(有多大呢,举个例子,有些一个商品绑了 5 万多个车型,为什么允许绑这么多,是否合理,我也不想纠结,以前的技术肯定也是无奈),GROUP BY 分类 id 有点久。
后续我尝试了方案二: 拿着该店铺绑定的所有分类 id ,循环遍历 sql 查询语句 where 过滤搜索条件+分类 id ,判断有无商品存在,该语句执行状况非常好,每句在 10-20ms ,查 20 个分类都不到 500ms 。大部分店铺也是 20 个分类以下的。
我统计了分类,少部分店铺存在 50-100 个分类,这些店铺采用方案二我非常担心,毕竟是循环,分类多了,累积时间就久。
想请教下各位,这种需求有更好的方案吗?我能想的办法都想了,不知道是产品设计复杂还是技术太菜了。。。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.