mysql 为什么不推荐三张表以上的关联?

2019-07-05 15:33:25 +08:00
 Aresxue

今天看到了一个说法说 mysql 不推荐三张表以上的关联,我觉得多表关联虽然可读性较差和耦合性较高,但是可以节省 IO 次数,减少执行时间从而提升接口的性能。

14087 次点击
所在节点    MySQL
68 条回复
lihongjie0209
2019-07-05 15:36:12 +08:00
不好扩展
liukaining
2019-07-05 15:41:53 +08:00
谈 SQL 的性能,请拿 explain 说话

不论是几个表,什么 sql,先 show index 看看索引怎么建的,再 explain 分析一波索引命中情况怎样
alpha2016
2019-07-05 15:44:56 +08:00
如果条件限制宽泛的话,三张表关联产生的笛卡儿积非常庞大,缓存机制什么的可能扛不住啊,得用 explain 来分析一下了
nekoneko
2019-07-05 15:48:18 +08:00
A 表一亿条,B 表一亿条,C 表一亿条,cross join 一下,完犊子了
qwerthhusn
2019-07-05 15:51:49 +08:00
主要看索引,如果都是拿着外键去连的话,10 张表 join 也很快
virus94
2019-07-05 15:53:23 +08:00
表大的话 服务器直接 GG
Aresxue
2019-07-05 16:10:00 +08:00
@lihongjie0209 这个我是同意的,但这个是要结合业务具体看待了,我其实是想问技术角度的。
jswh
2019-07-05 16:10:15 +08:00
不推荐的意思是这样做虽然不一定是最优的,但大概率可以避免一些前人犯过的错误。如果非常确定这样做没有问题,甚至更好,又有何不可。
Aresxue
2019-07-05 16:11:23 +08:00
@liukaining 不全是性能,不考虑分库分表分片的情况下,你单表可以用的 sql 一般在连接里也能用到。
Aresxue
2019-07-05 16:12:42 +08:00
@liukaining 上面手抖了,说的是索引
Aresxue
2019-07-05 16:14:48 +08:00
@alpha2016 这个大致数量级有没有,就以普通机器 4G 双核来考虑
Immortal
2019-07-05 16:15:08 +08:00
同意 8l
并不是说 3 张表联查一定不行 全部查询全部走在索引上 性能不会差
只是大家 sql 能力参次不齐 还是硬性规定来预防这些 毕竟如果某个大表全表查 服务器还是很容易 gg 的

还有一个我觉得就是"如果情况过于复杂,是不是哪里出了问题"
如果需要三表联查,考虑下是不是表结构设计的不够合理?
x7395759
2019-07-05 16:15:19 +08:00
也不推荐使用手机注册大于三个服务,收到垃圾短信的概率飙升 300%
Aresxue
2019-07-05 16:15:27 +08:00
@nekoneko 你这种太极端了,单表数据量那么多早拆了
Aresxue
2019-07-05 16:17:24 +08:00
@qwerthhusn 这个有点太理想化了,实际中表一多总有哪个是用不到索引的。
Aresxue
2019-07-05 16:20:43 +08:00
@virus94 很多系统到死可能都没那个数据量,而且这种情况你单表都没法完全避免。
Aresxue
2019-07-05 16:22:47 +08:00
@Immortal 我这边做电信业务的,业务复杂度比较高,这种业务系统里三表甚至更多联查实在太常见了。
npe
2019-07-05 16:23:02 +08:00
拆成单条,在代码里合并
Aresxue
2019-07-05 16:24:44 +08:00
@jswh 道理也懂,但不考虑扩展的话一般单条 sql 一次性查出来能稍微快上一点,这个可能是我关注点有点偏了。
jswh
2019-07-05 16:36:21 +08:00
@Aresxue 你也说了不考虑扩展嘛,这个就是个权衡的事情。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/580334

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX