
一: JOIN 连表查询
二:( select * from ***) 嵌套子查询
三:先查一条主表然后循环主表记录数据再查附表。
这几种哪个快一点?或者还有什么方法?
现在做 model 层的公共查库方法
每个方法我都 join 了十几张表,作为公共方法统一调用。
1 liangWL 2017-03-06 14:06:06 +08:00 用视图,或者你说的第一种应该是最快的 |
2 argos 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 |