2014-10-09 66 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