2013-06-13 41 views
1

我正在使用它來做一個查詢,我在C#.net mysql連接上達到20。 這個查詢需要永久執行,當我在MySQL shell中運行它需要3分鐘。 所有其他查詢運行良好。MySQL查詢永久運行,出了什麼問題?

string sqlQuery = "(SELECT TimeStamp, AVG(FwdHr), W FROM Meter_Data " + 
        "WHERE TimeStamp Between " + 
        (timeSt[0] - window).ToString() + 
        " AND " + (timeSt[0] + window).ToString() + 
        " AND DeviceID = '"+deviceId+"')"; 

for (int i = 1; i < timeSt.Count; i++) 
{ 
    sqlQuery = sqlQuery+ " UNION (SELECT TimeStamp, AVG(FwdHr), W 
       FROM Meter_Data WHERE TimeStamp Between " + 
       (timeSt[i] - window).ToString() + " AND " + 
       (timeSt[i] + window).ToString() + 
       " AND DeviceID = '" + deviceId + "')"; 
} 
+0

'Meter_Data'表的近似大小是多少? 'timest'列表中有多少項? – Andrei

+0

'...在MySQL shell中需要3分鐘...' - 當在MySQL shell中運行查詢時存在多少聯合?你是否確定**你正在運行相同的查詢? –

+0

表工會的百萬條記錄只有6或7 –

回答

0

檢查事項:

  1. 登錄查詢從您的C#代碼執行。你可能會「想」從MySQL shell中執行相同的查詢,但總有可能不會。
  2. 查看查詢的查詢計劃並查看正在使用的索引等。您可能需要在Timestamp上創建索引,這可能會極大地提高性能。
+0

我正在使用另一個運行良好的聯合查詢,在此查詢中,當我刪除聯合它也運行良好。如果聯合有問題,那麼其他查詢也不應該運行,如果存在某些連接問題,那麼爲什麼它沒有聯合運行?有一件事是當我調試這個 - 與工會它停止在datareader執行時間一段時間,然後拋出異常timout - 但沒有工會,它等待那個時間,但返回值.. –

+0

@Inderpal辛格 - 你有沒有按照我的建議在這些情況下查看查詢計劃?推薦閱讀:http://dev.mysql.com/doc/refman/5.5/en/execution-plan-information.html – dcp

+0

我是新的我的sql - 我不知道這麼多 –