为什么不建议多表Join
不建议使用 join
查询,最主要的原因是 join
的效率低
MySQL是使用了嵌套循环(Nested-Loop Join)的方式来实现关联查询的,简单点说就是要通过两层循环,用第一张表做外循环,第二张表做内循环,外循环的每一条记录跟内循环中的记录作比较,符合条件的就输出。
而具体到算法实现上主要有simple nested loop,block nested loop和index nested loop这三种。而且这三种的效率都没有特别高。
MySQL是使用了嵌套循环(Nested-Loop Join)的方式来实现关联查询的,如果有2张表join的话,复杂度最高是O(n^2),3张表则是O(n^3)…随着表越多,表中的数据量越多,JOIN的效率会呈指数级下降。
不能用 join 查询,如何做关联查询
主要有两种做法
- 在内存中自己做关联,即先从数据库中把数据查询出来之后,我们自己在代码中做二次的查询,然后再进行关联
- ==数据冗余==: 把一些重要的数据在表中做冗余,这样就可以避免关联查询了
- ==宽表==,就是基于一定的join关系,把数据库中多张表的数据打平做一张大宽表,==可以同步到ES或者干脆直接在数据库中直接查都可以==
- Title: 为什么不建议多表Join
- Author: cccs7
- Created at : 2025-03-23 16:39:00
- Updated at : 2025-03-23 16:52:50
- Link: https://cs7eric.github.io/2025/03/23/为什么不建议多表Join/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments