多表 join 如何优化?

2019-04-29 15:38:25 +08:00
 CUMTProgrammer

看阿里 JAVA 开发规范,禁止 3 表以上 join。

  1. [强制] 超过三个表禁止 join。需要 join 的字段,数据类型必须绝对一致; 多表关联查询时, 保证被关联的字段需要有索引。

比如我有一张订单表,肯定只存相关的 id,比如用户 id,支付方式 id 等等。如果我想把这些转化为中文输出,我就得 join 多表。

select o.order_id,u.user_name... from order o left join user u on o.user_id=u.user_id...

如果我有很多属性,那么 join 肯定超过 3 个了,不符合上诉规范。请问如何优化。

12132 次点击
所在节点    程序员
53 条回复
fox0001
2019-04-29 19:34:19 +08:00
@TommyLemon #35 很好奇,搞这么复杂,为什么不用 MongoDB ?取出来就是 JSON
no1xsyzy
2019-04-29 19:35:10 +08:00
@abcbuzhiming 呃…… 不知道为什么,尽管从来没听说过 OLAP,但我脑中默认应该这么处理……
我好像从听说关系型数据库就不觉得是拿来做分析的……

@CRVV 你理解我的话时把因果搞反了。好像是我的语文问题。
应该是 “少数糟糕设计的表造成了绝大多数的 JOIN ”。
TommyLemon
2019-04-30 10:03:46 +08:00
@fox0001 首先 MongoDB 使用场景比较有限,你看下数据库排名,它最辉煌的时候排第 4,
远低于前 3 的关系型数据库 Oracle, MySQL, SQL Server,后面又被关系型数据库 PostgreSQL 超过了,
所以真的做常规业务,还是关系型数据库更合适。
其次 MongoDB 虽然能用 JSON 查询,返回的也是 JSON,
但很多时候前端需要的是各种组合嵌套、且对象间有外键关联关系的数据结构,
MongoDB 给出的很难满足需求,更不用说 JOIN、子查询 等这种复杂的功能了。
还有权限,你真的打算用 MongoDB 数据库去做,而不是应用层控制?那就一套业务全都得在数据库做了。

APIJSON 目前仍然专注于实现 JSON 转 SQL 的 ORM 功能,对接关系型数据库满足大部分的业务场景,
实现完全自动化的 CRUD,不需要后端写代码,直接自动化解析,自动封装返回结果 JSON,
期间自动校验权限、数据、结构,自动防 SQL 注入,自动限流过载保护等。

为什么要用自动化接口与文档 ORM 库 APIJSON ?
前后端接口的 沟通、文档、联调 等 10 大痛点解析
https://github.com/TommyLemon/APIJSON/wiki/
cyhulk
2019-04-30 11:07:17 +08:00
@TommyLemon 真几把烦,这不是广告吗?自己去开帖子去
cyhulk
2019-04-30 11:07:48 +08:00
@fox0001 mongo 的多对多是鸡肋
TommyLemon
2019-04-30 12:15:18 +08:00
@cyhulk 解决问题的广告就是好广告,你看不惯拉黑,屏蔽就是了,何必自己还要看
cyhulk
2019-04-30 14:28:31 +08:00
@TommyLemon 怎么了,看不惯还不能 diss ?
TommyLemon
2019-04-30 17:01:35 +08:00
@cyhulk 哈哈,随你吧
TommyLemon
2019-04-30 17:11:03 +08:00
TommyLemon
2019-04-30 17:16:50 +08:00
@TommyLemon 我去,最后多了 / 就 404 了
troywinter
2019-04-30 20:08:01 +08:00
你这是 OLAP 吧,MySQL 只适合做 OLTP,OLAP 应该用另外的专业数据库来做,比如 Hive,这种 join 需求说明你们的架构有很大问题,不要在 OLTP 系统上做 OLAP。。。
zh81
2021-03-24 09:47:32 +08:00
@akira 请问这种冗余表的话一般是怎么做数据同步比较好呢
bz5314520
2021-04-04 22:53:01 +08:00
@zh81 触发器😂

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

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

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

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

© 2021 V2EX