不知道大家有没有遇到过一个 sql 连了 7,8 张表

2017-03-04 13:32:59 +08:00
 chaleaoch
在实际的生产环境中,这样会带来很大的效率问题吗?
昨天面试一个大兄弟,单张表只有 7--8 万的记录.连 7,8 张表查询,需要 7--8 秒.我表示很差异.

当然了目前我所遇到过的最大连表只连三张,单表数据也不是很大.大概是一张几千,另一张几百万的样子.

不过很快就查出来了.
4158 次点击
所在节点    数据库
86 条回复
zhy0216
2017-03-04 13:47:17 +08:00
也是最近刚看过...
huiyue
2017-03-04 14:26:09 +08:00
连几张表不是问题。但这个速度太慢的,是可以优化。这点数据量应该都是在秒内出来的。
flyingfz
2017-03-04 14:29:12 +08:00
看项目的类型。 一般互联网类型项目,这种情况应该比较少。

但在一些 管理系统 类型项目里,一个 sql 涉及 7 , 8 张表甚至更多,还是偶尔能见到。
一般来说,不用连那么多表,可以改成子查询之类的。

曾经有段时间,经常手写 Sql 做一些统计数据, Sql 语句在编辑器里要翻好几页(当然是格式化之后的 sql )。
loading
2017-03-04 14:29:22 +08:00
看看有没有用 like 这些语句。
KeepPro
2017-03-04 14:30:47 +08:00
试试 nosql 这类的
Infernalzero
2017-03-04 14:53:50 +08:00
连表一时爽,全服火葬场
whiler
2017-03-04 15:00:58 +08:00
连表一时爽,全服火葬场
jjx
2017-03-04 15:06:28 +08:00
给 lz 举个进销存的例子

一个销售报表, 包括以下细分单据销售单 /销售退货单 /零售单 /零售退货单, 关联数据包括核算员工, 核算部门, 货品,货品类型, 品牌, 商业伙伴, 商业伙伴隶属区域

报表需要实时统计需要 首先按用户权限 过滤允许的区域 /部门 /商品类型, 查询条件包括 品牌, 货品,货品类型, 货品标签, 合作伙伴标签, 员工, 部门等

算算看, 需要多少表
hector
2017-03-04 15:07:39 +08:00
我以前写的存储过程,大部分要连十几张表,还有各种自连接,临时表,加上各种 rollback ,存储过程递归你怕不怕,一个查询几个几百行,一个操作上万行
jjx
2017-03-04 15:08:47 +08:00
上面还漏了, 实际上我们的销售类单据还有 现款销售单
liprais
2017-03-04 15:12:41 +08:00
做分析很常见的,另外子查询也是关联
7654
2017-03-04 15:23:14 +08:00
很常见的啊
我们的报表最终所使用的 SQL 有几百行呢,连 7,8 张表算什么
还跨数据库呢
jarlyyn
2017-03-04 15:26:21 +08:00
看做什么业务了。

电商的做过。

订单,相关商品,支付信息,退款记录,配送记录,用户等等。

不过都是通过主键链接的,只通过主键搜索索引。
chaleaoch
2017-03-04 15:33:59 +08:00
@7654
@jjx
@hector
我没说连多张表有问题或者不常见.
我是很差异为什么单表几万的数据量查询出来的东西要好几秒钟.

例如,只查询出三条数据,这个查询时间要几秒钟...
有那么夸张吗?
如果有,应该如何处理?
dallaslu
2017-03-04 15:49:11 +08:00
不如把表结构和查询语句都贴出来,让大家也诧异一下。
wdlth
2017-03-04 16:01:31 +08:00
见过某 MIS 连接至少 20 个表,还加了 DISTINCT ,搞得他们请的 DB 顾问一脸懵逼。
7654
2017-03-04 16:11:52 +08:00
r#14 @chaleaoch 这应该是 DBA 的事,优化索引,建 partition 等等
当然硬件也要跟的上
flniu
2017-03-04 16:46:53 +08:00
"例如,只查询出三条数据,这个查询时间要几秒钟... "
通常是缺少索引或查询写法导致不使用索引。少数情况是服务器性能、网络、乃至查询客户端的问题。
flniu
2017-03-04 16:50:15 +08:00
互联网项目、采用 ORM 的系统一般不会 join 这么多表;
传统的管理信息系统里多表 join 较多;
ETL 、报表类的系统里几十张表 join 都不少见。
xeneizes
2017-03-04 17:02:03 +08:00
join 不怕,我同事用 in ,直接卡死,真是大 2B 啊

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

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

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

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

© 2021 V2EX