- 首先我们要达成概念上的一致,三个表及以上禁止使用join,两个表的join,要对sql进行严格的评估,看是否没有其他办法解决。并且不能跨领域职责。
- 两个表的join要看是否走了索引进行关联以及是否是小表驱动大表,评估未来数据量增长速度。当数据量大的时候,join的性能会大大降低。导致查询很慢。
- join查询,会导致大量数据进入内存中,多个join可能要进行多次扫描。那么内存其实有限的,为了一次大的join查询,导致之前的热数据被淘汰,内存命中率降低,导致线上其他业务也会受到影响。
- join查询,跨业务,两个不相干的表,因为业务放到一起。后续进行拆表,拆库,拆服务,都会造成极大的麻烦。
- 不好进行优化,如果是非join,通过内存来进行数据连接,无论是对单表加缓存,或者是改变单表的数据来源都是方便的,如果使用join极其难拆。
解决方案
- 通过内存进行拼接组装。大家很关心的就是分页场景,但是无论是什么分页场景,我们都是有一个主表来进行分页,其他的数据是我们的附属信息,我们先分页后,通过调用另一个表的查询方法,在内存中进行拼接,这样把性能放到业务机器上,加机器就可以提高性能。
- 先查出一张表的数据,然后另一张表通过in的方式进行条件限制查询。使用in代替关联查询,效率会更高。
- 减少数据冗余,业务层的关联是我们有目的,例如一对多的场景,如果是join查询,会造成大量的冗余,业务上join。则大大减少这个问题。
- 使用es构建宽表。通过es数据清洗后,直接进行查询。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




