在mysql中连接两个大表,使服务器超时

在mysql中连接两个大表,使服务器超时,mysql,sql,Mysql,Sql,此查询效率低下,无法执行。track和desiredspeed表有近百万条记录。。。。在此之后,我们希望自连接跟踪表以进行进一步处理。任何执行以下查询的有效方法都值得赞赏 select t_id, route_id, t.timestamp, s_lat, s_long, longitude, latitude, SQRT(POW((latitude - d_lat),2) + POW((longi

此查询效率低下,无法执行。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
首先,您使用的是sybase连接语法,我将对此进行更改 在大型数据集中,每个连接也要执行两次计算,这可能是低效的 这将无法使用索引,因为您正在对列执行计算,或者存储预计算的数据,或者根据上面应用的规则添加计算列,并相应地索引 最后,如果您使用临时表或公共表表达式,可能会更快,尽管您对MySQL不太了解
请格式化代码,使其不在一行中。您可以共享包括索引和约束的表结构吗?抱歉,由于声誉有限,我无法提供表。有两个表:track和desiredspeed,列如上所述。如果您需要有关表结构的任何特定信息,请说明您正在进行θ样式的联接。这是非常低效的。首先将其更改为ANSI连接。θ连接来自轨迹t,desiredspeed s,而ANSI连接是在定义要连接的关键点时使用*类似于*s.fkey=t.pkey上的*内部连接desiredspeed s。在此之后,请确保不会获取数百万行。如果您这样做了,至少要确保您有足够的内存来处理这些事情。如何使用临时表或公共表表达式?