2013-04-02 454 views
1

我正在研究查詢MySQL數據庫的C#WinForm應用程序。查詢所需的時間令人難以置信,速度很慢(30秒 - 1分鐘)。我對DB的經驗很少,我似乎無法弄清楚我的查詢有什麼問題。有人可以指出我做錯了什麼。查詢運行速度太慢

string sql = "SELECT t1.date, t1.name, t2.name, t3.addrs 
       FROM tbl1 t1 JOIN tbl2 t2 ON tbl1.id = tbl2.id 
       JOIN tbl3 t3 ON t3.addrs = t2.addrs WHERE t1.date = '2013-04-01';"; 

string connStr = "Server = 10.10.10.100; Database = mydb; etc..."; 
MySQLConnection conn = new MySQLConnection(connStr); 
MySQLCommand cmd = new MySQLCommand(sql, conn); 
MySQLDataReader rdr = null; 
DataTable dt = new DataTable(); 

dt.Columns.Add("Id","FirstName","LastName","Address","Date"); 

rdr = cmd.ExecuteReader(); 

while(rdr.Read()) 
{ 
    dt.Rows.Add(rdr["ID"], rdr["FirstName"], rdr["LastName"], rdr["Address"],rdr["Date"]); 
} 

conn.Close(); 
rdr.Close(); 

dataGridView.DataSource = dt; 
+0

@user ....你試過索引你的表嗎? – MikeTWebb

+2

請再次粘貼您的代碼,這次請選擇整個區塊,然後單擊代碼按鈕! – Blorgbeard

+0

查詢需要多長時間手動運行? – Blorgbeard

回答

3

我會確保你有連接字段和日期的索引。

0

我要去假設tbl2.addrs是一個獨特的密鑰。如果不是,你正在做一個交叉連接,這是非常昂貴的,可能不是你想要的。

也就是說:請確保您有tbl1.idtbl2.addrs,以及可選tbl1.date指標。

0

您不需要查詢中的表t3。您選擇的唯一字段是addrs。但是,由於您在該字段中加入了t2,因此您可以簡單地從t2中選擇它。這將是你的查詢。

SELECT t1.date, t1.name, t2.name, t2.addrs 
FROM tbl1 t1 JOIN tbl2 t2 ON tbl1.id = tbl2.id 
WHERE t1.date = '2013-04-01' 

此外,這看起來像一個.net應用程序。使用查詢參數。他們的一種補償品質是他們有時會加速查詢。