开篇:为什么 JOIN 查询经常变慢?
如果你在大厂工作过,大概率听过这样一条规矩:"不建议使用多表 JOIN"。甚至阿里巴巴开发手册直接说:超过三个表的 JOIN 禁止使用。
为什么 JOIN 这么不受待见?因为它的底层实现方式------嵌套循环------天然就是 O(NM) 的复杂度。两张表 JOIN 还好,三张表就是 O(NM*K),表越多、数据量越大,执行时间呈指数级增长。
打个比方:你要从两叠名片中找出同一个人的信息,你得拿第一叠中的每一张,去第二叠中逐张比对。如果第一叠有 1000 张,第二叠有 10000 张,那你最多要比对 1000 万次。这就是 JOIN 最朴素的执行方式------简单嵌套循环。
大约 11 分钟