2014-10-09 49 views
1

该查询效率低下,无法执行。轨道和想要的速度表有近百万条记录......在此之后,我们想要自我加入轨道表以便进一步处理。执行波纹管查询的任何有效的方法是感激..在mysql中连接两个大表,导致服务器超时

select 
     t_id, 
     route_id, 
     t.timestamp, 
     s_lat, 
     s_long, 
     longitude, 
     latitude, 
     SQRT(POW((latitude - d_lat),2) + POW((longitude - d_long),2)) as dst, 
     SUM(speed*18/5)/count(*) as speed, 
     '20' as actual_speed, 
     ((20-(speed*18/5))/(speed*18/5))*100 as speed_variation 
    from 
     track t, 
     desiredspeed s 
    WHERE 
      LEFT(s_lat,6) = LEFT(latitude,6) 
     AND LEFT(s_long,6)=LEFT(longitude,6) 
     AND t_id > 53445 
    group by 
     route_id, 
     s_lat, 
     s_long 
    order by 
     t_id asc 
+0

请格式化代码,使其不在一行中。 – artm 2014-10-09 11:33:18

+0

你可以共享表结构(包括索引和约束)吗? – Mureinik 2014-10-09 11:34:21

+0

抱歉,由于声誉有限,我无法提供表格。有两个表格:轨道和期望速度与列如上所述。请提及您是否想要表格结构的任何特定信息 – 2014-10-09 11:40:20

回答

0
  • 首先要将Sybase连接语法我想改变这种状况
  • 你也是每跨大型数据集执行加入两次计算这很可能是低效
  • 这将不能因为你是对列进行计算,以使用索引,要么存储数据预先计算或交替添加基于上述应用的规则计算列,和索引相应
  • 最后,它可以是更快我f您使用了临时表或常用表表达式(尽管这里不太了解MySQL)
+0

如何使用临时表或公用表表达式? – Ravindra 2014-10-09 12:06:55