你会选择连表查询速度一般还是拆成多次查询速度飞快的数据库查询方法?

2015-06-04 04:58:04 +08:00
 cevincheung

比如:

select from a join b on a.x=b.x left join c on a.x=c.x

还是
select id from a
程序获取ids
select b where id in (ids)
select c where id in (ids)

22914 次点击
所在节点    MySQL
41 条回复
lightening
2015-06-04 05:16:52 +08:00
连成一条。数据库和应用有时候不在一个机器上,网络延迟比较大。
cevincheung
2015-06-04 05:21:43 +08:00
@lightening 一般都会在同一内网吧
lightening
2015-06-04 05:40:59 +08:00
@cevincheung 我们不是的。
CupTools
2015-06-04 05:42:56 +08:00
连表,有时还会连4表查。
这是我上课的时候其中一条SQL:
SELECT Count(*) AS S_NAMEOfCount, supplier.s_nationkey,
nation.n_name
FROM (SELECT DISTINCT supplier.s_name,
supplier.s_nationkey,
nation.n_name
FROM (region
INNER JOIN ((customers
ey =
= orders.o_custkey)
gionkey)
INNER JOIN nation
ON customers.c_nationk
nation.n_nationkey)
INNER JOIN orders
ON customers.c_custkey
ON region.r_regionkey = nation.n_re
INNER JOIN supplier
ON nation.n_nationkey = supplier.s_n
ationkey)
GROUP BY supplier.s_nationkey,
nation.n_name;
Septembers
2015-06-04 05:51:15 +08:00
@lightening @cevincheung
即使是内网也不敢链路质量100%稳定
(QoS策略没做好导致链路质量下降之类的事情(这是网络运维的锅
liprais
2015-06-04 07:20:56 +08:00
三次查询的总时间肯定比一次的大吧
wy315700
2015-06-04 07:41:40 +08:00
分开查询何必用sql,用key value多好
zkd8907
2015-06-04 07:54:12 +08:00
@cevincheung 就算在内网上,网络IO成本也是比数据库服务器本地的IO成本要高的。。。(不要问我为什么知道的。。
clino
2015-06-04 08:10:18 +08:00
@zkd8907 我觉得你说的即使是对本机的数据库也是对的
mawenjian
2015-06-04 08:21:48 +08:00
分情况,强关联的表采用联表查询;如果关联性不是那么强的话,老老实实分步查,要不哪天拆库还得重写。
yangqi
2015-06-04 08:24:15 +08:00
只要索引什么的优化好,联表一次肯定比多次要快的
dai269619118
2015-06-04 08:46:01 +08:00
放数据里跑一下不就知道效率了吗
lucifer9
2015-06-04 08:48:53 +08:00
考虑到缓存的情况呢
caixiexin
2015-06-04 09:00:26 +08:00
数据库优化的一个原则就是查询次数越少越好,特殊的复杂sql语句除外。很多情况下网络开销,使用数据库链接都比劣质sql语句开销大。
lengxuecan
2015-06-04 09:13:48 +08:00
绝逼拆分写!没有之一!
spkinger
2015-06-04 09:14:32 +08:00
不连表,用union把几个sql连起来试试
sujin190
2015-06-04 09:18:46 +08:00
如果数据有几百万你join一次试试
anyforever
2015-06-04 09:23:58 +08:00
@yangqi +1 关键是索引得优化好
jsuper
2015-06-04 09:38:44 +08:00
如果索引设计得好,两边关联的字段都有索引,那么关联是很快的。远比你分多次查询要来得快。
lzsadam
2015-06-04 10:25:54 +08:00
单表,遇到复杂的查询条件就跪了,代码维护起来累死

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

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

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

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

© 2021 V2EX