在mysql中加入两个大表,使服务器超时

时间:2014-10-09 11:31:40

标签: mysql sql

此查询效率低下且无法执行。 track和desiredspeed表有近百万条记录......之后我们想自己加入轨道表进行进一步处理。任何有效的方法来执行波纹管查询... ...

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

1 个答案:

答案 0 :(得分:0)

  • 首先你使用的是sybase join语法我会改变那个
  • 您还在大型数据集中每次联接执行两次计算,这可能效率低下
  • 这将无法使用索引,因为您正在对列执行计算,要么存储预先计算的数据,要么根据上面应用的规则交替添加计算列,并相应地建立索引
  • 最后,如果您使用临时表或常用表表达式可能会更快(虽然这里不太了解MySQL)