2013-03-18 38 views
0

我有一個表,它是在MySQL中的相關GPS應用程序。每當我從asp.net應用程序執行它顯示胎兒錯誤。所以我決定在mysql中運行,執行SP需要1分多鐘(正好70秒)。是否有可能解決這些問題。從ASP.NET中減少MYSQL的執行時間

進一步的信息:

表1:server_gpsdata(它包含GPS數據它每10秒從鎖定GPS設備)。

select * from server_gpsdata SD 
INNER JOIN mstcab MC on MC.cabid= SD.cabid 
INNER JOIN server_tblstatus TS on TS.statusid= MC.CabStatusid 
INNER JOIN carmaster CM on CM.carid= MC.carid 
INNER JOIN cabtype CT on CT.cabtypeid= CM.sizeid 
where date(SD.cur_datetime) =current_date and 
     MC.Cabid not in (select D.cabid from trncabdriver D 
         where date(D.logintime)=current_date) and 
     SD.gpsdataid in (select max(SGD.gpsdataid) from server_gpsdata SGD 
         where date(SGD.cur_datetime)=current_date 
         group by SGD.cabid); 
+1

我們需要查看查詢和涉及的表,可能。 –

+1

您能否提供更多信息,例如相關代碼和安裝細節? – staaar

+1

這將是很好的嘗試延長查詢超時,但您將不得不提供有關您的數據訪問組件的更多細節。 –

回答

1

下應該顯示在性能上顯著改善:

select SD.*, MC.*, TS.*, CM.*, CT.* from 
(select max(SGD.gpsdataid) maxgpsdataid from server_gpsdata SGD 
where date(SGD.cur_datetime)=current_date 
group by SGD.cabid) SDM 
INNER JOIN server_gpsdata SD ON SDM.maxgpsdataid = SD.gpsdataid 
INNER JOIN mstcab MC on MC.cabid= SD.cabid 
INNER JOIN server_tblstatus TS on TS.statusid= MC.CabStatusid 
INNER JOIN carmaster CM on CM.carid= MC.carid 
INNER JOIN cabtype CT on CT.cabtypeid= CM.sizeid 
LEFT JOIN trncabdriver D ON MC.Cabid= D.Cabid AND date(D.logintime)=current_date 
where D.Cabid IS NULL 

注意,無論是現有的和擬議查詢返回從server_gpsdata,mstcab,server_tblstatus,carmaster和cabtype表中的所有列 - 的如果在查詢中僅選擇實際需要的列,查詢可能會更好地執行。

+0

同意以上所述,但可能需要檢查SD.cur_datetime的添加 – Kickstart

+0

@Kickstart:絕對不是--SDM/SGD.cur_datetime檢查達到相同的效果,同時從SD中刪除條件應確保SD記錄通過gpsdataid (它應該有一個索引)。 –

+0

@馬克班尼斯特 - 嗯。有可能。它將取決於gpsdataid,以及它是否是該表的唯一鍵。它可能不是。例如,可能會有不同日期的重複,這會將來自子選擇的連接混淆回server_gpsdata。然而,這完全取決於不幸未被指定的餐桌設計。如果是這種情況,也可以通過從子查詢中返回日期並在連接中使用該日期來修復。 – Kickstart