系统关联表的疑问

问题咨询 · liu23 · 于 6年前 发布 · 2120 次阅读

在查看fancyecommerce的代码时候,发现model的表并没有使用hasMany等进行关联,在查询的时候貌似也没有使用joinwith,join等进行查询。有某些方法看起来像是一步一步查询得到结果的。本人小白不太明白,作者在写查询代码的时候的优化思路是怎样的呢?

共收到 4 条回复
Fecmall#16年前 0 个赞

请贴上具体代码分析,不要空谈,我不会回答这样的问题

请说出来具体的表,具体的功能,以及具体的代码文件和代码位置,然后说出来你下这个论断的依据。

liu23#26年前 0 个赞

非常感谢版主的回答,其实我当时是想了解fecshop是怎么做多表关联的,刚刚想到版主一部分数据用到了mongodb,在文档中看到版主把商品类放到了mongodb储存,然后cart order coupon表,都是用的mysql表。但我还在找这部分怎么关联起来的

Fecmall#36年前 0 个赞

@liu23 [[[#2楼](#comment2)](#comment2)](#comment2) join操作,一般是避免使用的,因为join操作,需要将2个或者多个表,在内存里面拼成一个临时表, 如果两个表非常大,如果是万级别的表,这样非常的占用内存和资源,因此,两个大表,尽量避免使用join操作,做个erp的童鞋应该知道这个,一开始用的join查询,性能还不错,当业务积累数据越来越多,两个表的数据到了几十万,甚至百万千万的时候,会发现系统越来越慢,通过慢查询日志查看,很多都是join语句搞的。

如果先查一个表的数据,然后在通过in查询或者其他查询去另外一个表查询,把相关字段加上索引,会高效的多。

但是,有一些需求是必须使用join操作才能完成的,通过上面的多次查询是无法完成的,譬如:进行排序的两个字段分布在两个表中,必须先把两个表join起来生成临时表,然后才能进行两个字段排序取值,这个是必须用join的 。

但是,我们也有办法不使用join,就是做数据冗余,把join的两个表,其中的一个字段冗余到另外一个表中,也就是用于排序的a表的字段,在b表中也加入一个字段,这样我们在单表就可以进行排序,这样可以加快查询,缺点就是维护数据更新会麻烦一些,而且增加存储空间,各有利弊吧。

mongodb多维度存储接口,类似于php的多维数组,因此不需要join,产品表一个表搞定,可以很快的查询出来结果。

fecshop中没有用到join操作,多表的关联查询,都是查完一个表,然后查询下一个表。

liu23#46年前 0 个赞

感谢版主提供的优化思路。正好现在做的系统也是关于erp的,参考下版主的思路看看效果如何。。

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics