为什么不建议多表Join

cccs7 Lv5

不建议使用 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 查询,如何做关联查询

主要有两种做法

  1. 在内存中自己做关联,即先从数据库中把数据查询出来之后,我们自己在代码中做二次的查询,然后再进行关联
  2. ==数据冗余==: 把一些重要的数据在表中做冗余,这样就可以避免关联查询了
  3. ==宽表==,就是基于一定的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
On this page
为什么不建议多表Join