一: JOIN 连表查询
二:( select * from ***) 嵌套子查询
三:先查一条主表然后循环主表记录数据再查附表。
这几种哪个快一点?或者还有什么方法?
现在做 model 层的公共查库方法
每个方法我都 join 了十几张表,作为公共方法统一调用。
1
liangWL 2017-03-06 14:06:06 +08:00
用视图,或者你说的第一种应该是最快的
|
2
tianshuang 2017-03-06 14:08:23 +08:00
快不快 explain 下
|
3
yeyuexia 2017-03-06 14:10:09 +08:00
join 查询是最快的……你那种直接作 view 吧……
|
4
domty 2017-03-06 14:10:16 +08:00
join+索引
|
6
labasq OP |
8
yeyuexia 2017-03-06 14:45:42 +08:00
@labasq 除了不够灵活以外没什么缺点 一般常用的确定的复杂查询都建议用 view 来做的
其实 如果是做报表,为了效率等考虑,又不要求很高的实时性的话,还是建议用异步任务来生成专门的表。毕竟数据量大了之后 join 性能也很让人心碎…… |
9
ncisoft 2017-03-06 16:05:35 +08:00 via Android
你用什么数据库?
|
10
fantastM 2017-03-06 18:55:57 +08:00
3 是写两个 sql 的意思吗?拆分 sql 、子查询、连接查询的效率,没有肯定的答案,优化复杂 sql 的关键是索引。“最优”的索引有时比“好的”索引性能要好两个数量级......
另外,自己不清楚执行效率的 sql ,都应该 exlpain 一下。 |
11
tramedy 2017-03-06 18:57:54 +08:00
join + 索引,如果中间表没有索引,说明数据库索引设计有问题。除非中间表很小
|
12
mingyun 2017-03-06 23:18:13 +08:00
分开查询吧
|
16
labasq OP |
21
ncisoft 2017-03-07 09:44:36 +08:00 via Android
@labasq MySQL 的表连接基本就是废物一个,自己用 explain 看看能不能有效利用索引吧,也许加提示( hint ?)能管点用
|
22
blacklee 2017-03-07 10:18:50 +08:00
针对标题来讲:这种问题都是具体问题具体分析。
针对主贴来讲:如果都 join 了 10+张表,我看不出多次 select 的坏处在哪里。 图省事来讲:就全部 join ,性能问题丢给 DBA 去。 有责任心+便利来讲:那就拆分 join 到数据量大的表为多一次 select ,数据量小的表直接 join 。 |
23
yeyuexia 2017-03-07 14:26:57 +08:00
|