最近在做一个有关地理位置的应用,涉及到的逻辑比较复杂。其中一个表用于存储传感器的基本信息,另一个表存储传感器获得的数据点(这个表的数据相对于其他表来说比较大)。
为了获得用户所拥有的每一个传感器最近一次的数据的列表,我是用了一个带有多个JOIN的语句,并且用Group by来合并同一个传感器的数据,以此来找到每个传感器最近一条数据。但是现在有了几万条数据之后感觉查询有些慢。。。
大家认为这种情况下是使用Join好还是分开多次Select更好呢?
新手求轻喷……
1
slixurd 2015 年 5 月 29 日 如果是为了让别人容易看懂可以分开多次select,每个select都写的尽可能简单,这样比较容易维护
不过用运行时间空间做标准的话,还是JOIN比较好,不过记得用子查询,不然笛卡尔积太大速度一样很慢 |
2
iam36 2015 年 5 月 29 日 看过滤条件,只要有(就是where啦),肯定分开差效率高。
数据达到一定量级后结果就会有极大的差别 |
3
b821025551b 2015 年 5 月 29 日 按照where落点数据的前几个字段做索引看看还慢不慢
|
4
yangqi 2015 年 5 月 29 日 join肯定比多次select要好,当然前提是表和语句要优化好
|
5
zrp1994 OP @slixurd 确实有用子查询,但是主要是SQL Server的group by什么的和MySQL很不一样,所以加了好几个join和子查询,感觉对效率不放心,看样子还是要从现有的语句进行优化呀~
|
7
F281M6Dh8DXpD1g2 2015 年 5 月 29 日 不知道你用的什么数据库,
如果是商业数据库的话,join基本上能优化的很好了,至少比你自己拆的好 mysql倒是不一定了。 p.s 一定要收集统计信息! |
9
otakustay 2015 年 5 月 29 日
如果你的数据量会提升到需要分表甚至分库的程度,建议减少join。一但分表分库,join就玩不成了
|
11
mN71eOOprFyMsnPx 2015 年 5 月 29 日
正在维护别人写的程序。sql慢查询非常多,我只想说:“能不能分开查询?不要用这么多join之类的联表查询?”
基本10个人访问页面,mysql就跑到600%左右的。哎! |
12
zhouquanbest 2015 年 5 月 29 日 实习时发现的第一件事就是不让使用join
|
13
exuxu 2015 年 5 月 29 日 心理想着select,敲着成了delete
|
14
ConteMan 2015 年 5 月 29 日
=。= 新手什么的公司才不会让你用join 分分钟搞死一些东西
|
16
huijiewei 2015 年 5 月 29 日
以前沉迷于使用复杂的 SQL 语句,现在还是喜欢把复杂的东西分拆为几个简单的。
|
17
loveyu 2015 年 5 月 29 日
一般我如果有索引且不复杂的SQL直接join,复杂点的就分吧。当然看统计
|
18
Cloudee 2015 年 5 月 29 日 via iPhone
explain一下看看执行计划,join的话一不小心就循环起来了
|
19
caoyue 2015 年 5 月 29 日
既然是用SQL Server ,查询分析器还是用起来吧
|
20
bitzhuxb 2015 年 5 月 29 日 感觉很简单呀~
做一个 子查询 计算出每个传感器的最近一条数据。 再做一个子查询 计算出 用户的所有传感器 然后利用 然后这两个子查询进行join. 两个子查询量已经很小了 |
21
koodai 2015 年 5 月 29 日 via iPhone
join在mysql下性能差,不推荐,我在阿里云数据库的体验,子查询要极大提高性能。
原因不明所以。 |
24
coolcfan 2015 年 5 月 29 日
我是跑测试的,不懂这块的具体技术细节,但是用 MySQL 的话,explain 一下,看到给出的那个表格里要是写了需要创建临时表的标记,那并发高一点 CPU 占用会很恐怖。
|
26
mingyun 2015 年 6 月 7 日
楼主现在采用什么方案?有用吗
|
30
mN71eOOprFyMsnPx 2015 年 6 月 14 日
@mingyun 最多4个表。表数据基本都是10多万行。基于运维这边,不好优化啊。
|